原題
對(duì)于一個(gè)逆波蘭數(shù)學(xué)表達(dá)式求值
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
解題思路
- 使用stack,遍歷逆波蘭表達(dá)式
- 遇到
+-*/則從stack中pop出兩個(gè)數(shù)做相應(yīng)的運(yùn)算,結(jié)果push入棧 - 遇到數(shù)字直接入棧
完整代碼
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()