自己思路
无参考
利用栈的数据结构,从头遍历给定序列,把操作数存入栈中,遇到操作符时,将栈中前两个操作数弹出进行计算,结果继续推入栈中,知道最后一次计算完毕,弹出最后结果。代码
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类型即可解决问题。