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即可;我自作聪明使用‘//’向下取整,会在计算负数时出现错误。

总结完要点后,思路则十分明确:

遍历输入的表达式:如果是数字则放置再栈中;如果为计算符,则取出最上两个数字进行计算,并将计算结果替换进去即可。