逆波兰表达式又叫做做后缀表达式。在通常的表达式中,二元运算符总是置于与之相关的两个对象之间,这是中缀表达式,而逆波兰表达式是每一运算符都置于其运算对象之后,所以称为后缀表达式。
举例:中缀:4+5
后缀:4 5 +
逆波兰表达的式的实现符合栈先进后出的特性。
算法:输入你要计算的逆波兰表达式,然后以此读取判断,如果是数字则将其压栈,如果读取到‘+’,‘-’,‘*’,‘/’,其中的一个,将之前压栈的数据出栈然后进行对用的运算操作,再将其压栈。然后继续向后读取重复之前的判断操作。
需要注意的是,本题要得到所得结果的整数部分,python中‘/’会得到小数部分并且影响最后结果,所以用到‘//‘来进行运算,同时,因为会有负数运算,为了防止出现错误,可以用-(-n // m)形式在两个数乘积为负时进行运算。
a = []
for i in tokens:
if i in ["+","-","*","/"]:
m = a.pop()
n = a.pop()
if i == "+":
t = n + m
elif i == "-":
t = n - m
elif i == "*":
t = n * m
else:
if n * m > 0:
t = n // m
else:
t = -(-n // m)
a.append(t)
else:
a.append(int(i))
return a.pop()
if name == “main”:
a = Solution()
T = [“10”,“6”,“9”,“3”,"+","-11","","/","",“17”,"+",“5”,"+"]
b = a.evalRPN(T)
print(b)