题解 | #逆波兰表达式求值#
逆波兰表达式求值
https://www.nowcoder.com/practice/885c1db3e39040cbae5cdf59fb0e9382
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]