📅  最后修改于: 2023-12-03 15:23:02.330000             🧑  作者: Mango
该题是一道关于逆波兰表达式求值的算法题。
题目描述:
给定一个逆波兰表达式,求其求值结果。
逆波兰表达式是一种后缀表达式,其中运算符在操作数之后。例如,下面的表达式:
3 + 4
可以表示为逆波兰表达式
3 4 +
可以用栈来求解逆波兰表达式,算法的步骤如下:
创建一个空栈 S。
从左到右扫描逆波兰表达式中的每个元素。
如果当前元素是一个操作数,则将其压入栈 S 中。
如果当前元素是一个运算符,则将 S 弹出两个操作数进行计算,并将计算结果压入 S 中。
当表达式被完全扫描后,S 中仅剩下一个元素,即为所求的结果。
下面是一个计算逆波兰表达式的 Python 代码实现:
def eval_rpn(tokens):
stack = []
for token in tokens:
if token in "+-*/":
b = stack.pop()
a = stack.pop()
if token == "+":
stack.append(a + b)
elif token == "-":
stack.append(a - b)
elif token == "*":
stack.append(a * b)
else:
# 注意除数不能为0
stack.append(int(float(a) / b))
else:
stack.append(int(token))
return stack[0]
其中,tokens 是一个字符串列表,包含逆波兰表达式中的每个元素(操作数或运算符)。
代码通过迭代每个元素,并在运算符时进行栈操作,计算并压入栈中,在所有元素计算完成后,返回栈中仅剩的一个元素,即为逆波兰表达式的计算结果。
参考资料: