150. 逆波兰表达式求值(中等)

https://leetcode.cn/problems/evaluate-reverse-polish-notation/

给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。

请你计算该表达式。返回一个表示表达式值的整数。

注意:
有效的算符为 ‘+’、‘-’、‘*’ 和 ‘/’ 。
每个操作数(运算对象)都可以是一个整数或者另一个表达式。
两个整数之间的除法总是 向零截断 。
表达式中不含除零运算。
输入是一个根据逆波兰表示法表示的算术表达式。
答案及所有中间计算结果可以用 32 位 整数表示。

示例 1:
输入:tokens = [“2”,“1”,“+”,“3”,“*”]
输出:9
解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9

class Solution:
    def evalRPN(self, tokens: List[str]) -> int:
        # 星级:☆☆
        # 标签:栈
        stack = []
        for item in tokens:
            if item == '+':
                b = stack.pop()
                a = stack.pop()
                tmp = a + b
                stack.append(tmp)
            elif item == '-':
                b = stack.pop()
                a = stack.pop()
                tmp = a - b
                stack.append(tmp)
            elif item == '*':
                b = stack.pop()
                a = stack.pop()
                tmp = a * b
                stack.append(tmp)
            elif item == '/':
                b = stack.pop()
                a = stack.pop()
                tmp = int(a / b)  # 向下取整不要写成a//b,因为如果是负数会出问题
                stack.append(tmp)
            else:
                stack.append(int(item))

        return stack[0]
  • 28
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值