牛客AB4 逆波兰表达式求值

📜题目

->前往做题<-

给定一个逆波兰表达式,求表达式的值。

数据范围:表达式长度满足 1<=n<=10^4,表达式中仅包含数字和 + ,- , * , /,其中数字的大小满足 |val| <= 200

示例1

输入:["2","1","+","4","*"]
返回值:12

示例2

输入:["2","0","+"]
返回值:2

知识普及:逆波兰表达式 ——参考文章

  • 运算符号永远在数值的后面
    如普通表达式为 2+3,因为运算符在数值中间,所以这种表达式也叫中缀表达式,而逆波兰表达式写法是 23+(将运算符写在数值后面)。
  • 运算符的置后顺序是由运算顺序决定的
    如(1+2)*(3+4),逆波兰表达式为 12+34+ *,而不是 1234++ *,因为运算顺序是先计算(1+2),然后计算(3+4),最后再将两个结果相乘。所以顺序就是 12+,然后 34+,最后一个 *。而不是无脑的将所有数值置前,符号置后。

🖊题解

利用栈的特点,在逆波兰表达式中

  1. 遇到 +-*/运算符号就把栈中的前两个数值拿出来进行计算

  2. 否则将元素(非运算符号)压入栈中

  3. 如此反复,最后在栈中剩下的元素就是计算结果

class Solution:
    def evalRPN(self , tokens: List[str]) -> int:
        stack = []
        for t in tokens:
            if t in ["+", "-", "*", "/"]:
                b = stack.pop()
                a = stack.pop()
                if(t == "+"):
                    stack.append(a+b)
                elif(t == "-"):
                    stack.append(a-b)
                elif(t == "*"):
                    stack.append(a*b)
                elif(t == "/"):
                    stack.append(int(a/b))
            else:
                stack.append(int(t))
        return stack.pop()
posted @ 2022-03-23 23:19  aJream  阅读(49)  评论(0编辑  收藏  举报