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]