描述:
给定一个逆波兰表达式,求表达式的值。
这个也叫后缀表达式
数据范围:表达式长度满足 1≤n≤10^4,表达式中仅包含数字和 + ,- , * , / ,其中数字的大小满足 ∣val∣≤200 。
示例:
示例1 | 示例2 |
输入: ["2","1","+","4","*"] 返回值: 12 | 输入: ["2","0","+"] 复制返回值: 2 |
思路:
在这个问题中,我们构造辅助栈st。
首先遍历输入的字符串,当遇到数字时,将其加入辅助栈st中;
当遇到运算符号时,连续弹出栈的顶部元素,对其进行相应的运算。
注意:
· 两个数在做减法和除法是有顺序的。第二个弹出的元素往往用来做被减数(或被除数)。
· 计算的输出结果转换为int型,故做除法的时候需要取整(也就是四舍五入)。
· 输入的字符串中每一个元素都是字符型,所以在辅助栈中添加数字时需要将字符型数字转换为int型。
代码实现:
'''
给定一个逆波兰表达式,求表达式的值。
这个也叫后缀表达式
数据范围:表达式长度满足 1≤n≤10^4
,表达式中仅包含数字和 + ,- , * , / ,其中数字的大小满足 ∣val∣≤200 。
'''
def evalRPN(tokens):
st = []
for token in tokens:
if token in "+-*/":
a = st.pop()
b = st.pop()
if token == '+':
st.append(b+a)
elif token == '-':
st.append(b-a)
elif token == '*':
st.append(b*a)
elif token == '/':
st.append(b/a) # 取整,四舍五入
else:
st.append(int(token))
return st[0] # 输出栈顶元素