原題
對于一個逆波蘭數學表達式求值
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
解題思路
- 使用stack,遍歷逆波蘭表達式
- 遇到
+-*/
則從stack中pop出兩個數做相應的運算,結果push入棧 - 遇到數字直接入棧
完整代碼
class Solution(object):
def evalRPN(self, tokens):
"""
:type tokens: List[str]
:rtype: int
"""
stack = []
operators = "+-*/"
for str in tokens:
if str not in operators:
stack.append(int(str))
else:
a = stack.pop()
b = stack.pop()
if str == "+":
stack.append(a + b)
elif str == "-":
stack.append(b - a)
elif str == "*":
stack.append(a * b)
elif str == "/":
if a * b < 0 and b % a != 0:
stack.append(b / a + 1)
else:
stack.append(b / a)
if not stack:
return 0
return stack.pop()