前往此题

解题思路

这题用栈能很轻松的解出来。根据题意我们可以知道在遍历整个字符串的时候遇到运算符就要执行运算。

算法过程

  1. 初始化两个栈stack, ops,一个栈中存储运算符,另一个负责存储操作数
  2. 遍历字符串,遇到非运算符则把字符放入stack
  3. 如果遇到运算符,则开始运算。从stack中取出栈顶的2个操作数,注意-,/运算时注意前后顺序
  4. 最终返回栈中存储的数就是最终结果

代码

class Solution:
    def evalRPN(self, tokens: List[str]) -> int:
        stack, ops = [], ["+","-","*","/"]

        def cal(a,b,p):
            if   p == "+": return a+b
            elif p == "-": return b-a
            elif p == "*": return a*b
            elif p == "/": return int(b/a)

        for s in tokens:
            if s not in ops: stack.append(int(s))
            else:
                a = stack.pop()
                b = stack.pop()
                res = cal(a,b,s)
                stack.append(res)
        return stack[0]