【leetcode/python/M/150】Evaluate Reverse Polish Notation

题目

在这里插入图片描述

基本思路

什么是逆波兰表达式?其实就是后缀表达式!!!你又问了,什么是后缀表达式呢?你数据结构一定都忘光了!!!

后缀表达式就是把操作数放前面,把操作符后置的一种写法,我们通过观察可以发现,第一个出现的运算符,其前面必有两个数字,当这个运算符和之前两个数字完成运算后从原数组中删去,把得到一个新的数字插入到原来的位置,继续做相同运算,直至整个数组变为一个数字。

此题其实是栈的完美应用

从前往后遍历数组,遇到数字则压入栈中,遇到符号,则把栈顶的两个数字拿出来运算,把结果再压入栈中,直到遍历完整个数组,栈顶数字即为最终答案。

注意⚠️:

  • 这里的除法操作是针对整数的,会对结果进行去尾操作。
  • 对负数与整数的除法操作也与Python自带的计算方式不同,Python计算-1//2结果为-1,而在这里应该为0,所以要进行特殊的处理。

实现代码

class Solution(object):
    def evalRPN(self, tokens):
        """
        :type tokens: List[str]
        :rtype: int
        """
        stack = []
        for token in tokens:
            if token not in ("+", "-", "*", "/"):
                stack.append(int(token))
            else:
                num2 = stack.pop()
                num1 = stack.pop()
                if token == '+':
                    res = num1 + num2
                elif token == '-':
                    res = num1 - num2
                elif token == '*':
                    res = num1 * num2
                else:
                    if num1*num2 < 0:
                        res = -(abs(num1)//abs(num2))
                    else:
                        res = num1 // num2
                stack.append(res)
        return stack[0]
                    
                
            
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值