LeetCode-Q150-Evaluate Reverse Polish Notation

  • 自己思路

  • 参考
    利用栈的数据结构,从头遍历给定序列,把操作数存入栈中,遇到操作符时,将栈中前两个操作数弹出进行计算,结果继续推入栈中,知道最后一次计算完毕,弹出最后结果。

  • 代码

class SolutionQ150(object):
    def evalRPN(self, tokens):
        stack = []
        operations = {"+":lambda x,y: y+x, "-":lambda x,y: y-x, "*": lambda x,y: y*x, "/": lambda x,y: y/x}
        for i in tokens:
            if i in operations:
                stack.append(int(operations[i](stack.pop(),stack.pop())))
            else:
                stack.append(float(i))
        return int(stack.pop())

其中将操作符以lambda函数形式存在字典中;代码中有一个细节,在stack.append(float(i))处,可能会问为什么前面的计算结果可以存为int类型,在开始存入操作数的时候要存为float类型呢?原因是Python中对int计算的非整数结果是向下取整的,比如int(13/5)=2,int(-13/5)=-3,而如果不存为float,存为int的话,当出现int(-1/3)时,按照题意应该返回0,但是int的取整方式会存为-1。但是int()在对float类型进行转换时,会将浮点数部分(小数)去掉,即int(-0.1)=0,所以在存操作数时存为float类型即可解决问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值