Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +
, -
, *
, /
. Each operand may be an integer or another expression.
Note:
- Division between two integers should truncate toward zero.
- The given RPN expression is always valid. That means the expression would always evaluate to a result and there won't be any divide by zero operation.
Example 1:
Input: ["2", "1", "+", "3", "*"] Output: 9 Explanation: ((2 + 1) * 3) = 9
Example 2:
Input: ["4", "13", "5", "/", "+"] Output: 6 Explanation: (4 + (13 / 5)) = 6
用一个stack来存储数字和符号。
遇到符号时,把前两个数字pop()出来进行计算。
python比较闹心的就是除法上,3//2=1, -3//2=-2。所以我直接都转为正数进行计算,再加入符号。
class Solution(object):
def evalRPN(self, tokens):
"""
:type tokens: List[str]
:rtype: int
"""
if len(tokens)==0:return
stack=[]
for c in tokens:
if c in '+-*/':
b=int(stack.pop())
a=int(stack.pop())
if c=='+':
stack.append(a+b)
elif c=='-':
stack.append(a-b)
elif c=='*':
stack.append(a*b)
else:
num=abs(a)//abs(b)
sym=-1 if a*b<0 else 1
stack.append(sym*num)
else:
stack.append(c)
return stack[0]