题目
描述
给定一个逆波兰表达式,求表达式的值。
数据范围:表达式长度满足 1≤n≤104 1 \le n \le 10^4 \ 1≤n≤104 ,表达式中仅包含数字和 + ,- , * , / ,其中数字的大小满足 ∣val∣≤200 |val| \le 200 \ ∣val∣≤200 。
示例
示例1
输入:
[“2”,“1”,“+”,“4”,“*”]
返回值:
12
示例2
输入:
[“2”,“0”,“+”]
返回值:
2
代码
```python
'''
逆波兰表达式计算
维持一个栈,存储操作数
遇到操作数则入栈
遇到运算符,则从弹出两个操作数进行计算,并将结果再存入栈中
注:这道题的除非运算,必须取整(四舍五入),即用int(b/a),而不能用b//a,双斜杠都是向下取整。
'''
#
# @param tokens string字符串一维数组
# @return int整型
#
class Solution:
def evalRPN(self, tokens: List[str]) -> int:
stack = [] # 存储操作数
for i in tokens: #tokens为输入的逆波兰表达式
if i in "+-*/":#遇到运算符号,则开始对前面两个数四则运算
a = stack.pop()
b = stack.pop()
# 加减乘除
if i == '+':
stack.append(b + a)
elif i == '-':
stack.append(b - a)
elif i == '*':
stack.append(b * a)
else:
stack.append(int(b / a)) # 取整
else:
stack.append(int(i))#不是运算符号则入栈
return stack[0] #返回最终结果