根据逆波兰表示法link,求表达式的值。
有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。**
示例 1:
输入:tokens = [“2”,“1”,“+”,“3”,““]
输出:9
解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9
示例 2:
输入:tokens = [“4”,“13”,“5”,”/“,”+“]
输出:6
解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6
示例 3:
输入:tokens = [“10”,“6”,“9”,“3”,”+“,”-11","”,“/”,“*”,“17”,“+”,“5”,“+”]
输出:22
算法实现:
用栈操作运算:遇到数字则入栈,遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中。
class Solution(object):
def evalRPN(self, tokens):
"""
:type tokens: List[str]
:rtype: int
"""
stack = []
for token in tokens:
if token not in ["+", "-", "*", "/"]:
stack.append(int(token))
else:
num1 = stack.pop()
num2 = stack.pop()
if token == "+":
stack.append(num1 + num2)
elif token == "-":
stack.append(num2 - num1)
elif token == "*":
stack.append(num1 * num2)
elif token == "/":
if num1 * num2 < 0:
result = -((-num2) // num1)
stack.append(result)
else:
stack.append(num2 // num1)
print(stack)
return stack.pop()