from typing import List

class Solution:
    def evalRPN(self, tokens: List[str]) -> int:
        # 初始化一个空栈,用于存储计算过程中的中间结果
        stack = []
        
        # 遍历给定的逆波兰表达式中的每个元素
        for token in tokens:
            # 判断当前元素是否为运算符
            if token in {'+', '-', '*', '/'}:
                # 如果是运算符,则从栈顶弹出最近的两个操作数(b在a之后弹出,即b为右操作数,a为左操作数)
                b = stack.pop()
                a = stack.pop()
                
                # 根据运算符执行相应的运算,并将结果压回栈中
                if token == '+':
                    stack.append(a + b)  # 加法
                elif token == '-':
                    stack.append(a - b)  # 减法
                elif token == '*':
                    stack.append(a * b)  # 乘法
                elif token == '/':
                    # 除法,需要特别处理除以零的情况
                    if b == 0:
                        raise ValueError("Division by zero encountered")  # 抛出异常,避免除零错误
                    # 注意:这里使用了int(a / b)来进行整数除法,确保结果为整数
                    stack.append(int(a / b))
            else:
                # 如果当前元素不是运算符,说明它是数字,直接转换为整数后压入栈中
                stack.append(int(token))
        
        # 当所有元素遍历处理完后,栈顶剩下的就是最终计算结果,返回这个值
        return stack[0]