1.题目
输入: ["4", "13", "5", "/", "+"]
输出: 6
解释: (4 + (13 / 5)) = 6
输入: ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]
输出: 22
解释: ((10 * (6 / ((9 + 3) * -11))) + 17) + 5
2.解题思路
当列表的元素为数字时,把数值入栈;当遇到运算符号时,弹出栈的最后两个数值进行运算,再将运算结果入栈,继续循环
def evalRPN(tokens):
stack=[]
for elem in tokens:
if elem !='-' and elem !='+' and elem !='*' and elem !='/':
stack.append(int(elem))
else:
elem1=stack.pop()
elem2=stack.pop()
if elem=='-':
num=elem2-elem1
stack.append(num)
elif elem=='+':
num=elem1+elem2
stack.append(num)
elif elem=='*':
num=elem1*elem2
stack.append(num)
else:
num=int(elem2/elem1)
stack.append(num)
print(stack[0])
evalRPN(["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"])
注:num1//num2是向下取整,eg:2//-201=-1,而int(num1/num2)是接近于零求整,eg:2//-201=0