LeetCode-Q150-Evaluate Reverse Polish Notation

来源:互联网 发布:linux怎么执行命令 编辑:程序博客网 时间:2024/06/11 16:22
  • 自己思路

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

  • 代码

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类型即可解决问题。

0 0
原创粉丝点击