遍历tokens,如果遇到三个符号符合波特兰式,则计算并修改tokens。最后的tokens只有一个元素,即最后的结果。
class Solution:
def evalRPN(self, tokens) -> int:
tlen = len(tokens)
lookuptb = set(['+','-','*','/'])
i = 0
while i+2<tlen:
if tokens[i] not in lookuptb and tokens[i+1] not in lookuptb and tokens[i+2] in lookuptb:
num1 = int(tokens[i])
num2 = int(tokens[i+1])
if tokens[i+2]=='+':
newtoken = num1 + num2
elif tokens[i+2]=='-':
newtoken = num1 - num2
elif tokens[i+2]=='*':
newtoken = num1 * num2
else:
newtoken = int(num1 / num2)
tokens.pop(i+2)
tokens.pop(i+1)
tokens.pop(i)
tokens.insert(i,str(newtoken))
tlen -= 2
if i>0:
i -= 1
else:
i += 1
return int(tokens[0])
用栈的方法也可以,遍历tokens,遇到数字进栈,遇到符号则取出栈顶两个元素进行运算后再次入栈。