class Solution:
def evalRPN(self , tokens: List[str]) -> int:
nums = []
compute_dic = ['+', '-', '*', '/']
for i in tokens:
if i in compute_dic:
if i == '+':
num = nums[-2] + nums[-1]
elif i == '-':
num = nums[-2] - nums[-1]
elif i == '*':
num = nums[-2] * nums[-1]
elif i == '/':
num = nums[-2] / nums[-1] # 注意这里要使用截断除法,先除再转为int
nums = nums[:-2]
nums.append(int(num))
else:
nums.append(int(i))
return nums[0]
简单的python解题思路:
首先我们需要明白逆波兰表达式的含义,在逆波兰表达式中,出现的数字会被依次存入一个栈,若遇到运算符,则取出最上的两个数字进行计算,比如:
[3,4,5,+,+]
3,4,5->栈中有[3,4,5]
+->取出第一个运算符+,最上的两个数字4,5->4+5=9->栈中有[3,9]
+->取出第二个运算符+,最上的两个数字3,9->3+9=12->栈中有[12]
因此,需要注意表达式中可能会出现连续的数字或运算符。
另一个值得注意的点是,这里的除法可能会出现小数,在本题直接转化为int即可;我自作聪明使用‘//’向下取整,会在计算负数时出现错误。
总结完要点后,思路则十分明确:
遍历输入的表达式:如果是数字则放置再栈中;如果为计算符,则取出最上两个数字进行计算,并将计算结果替换进去即可。

京公网安备 11010502036488号