Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +, -, *, /. Each operand may be an integer or another expression.
Some examples:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
class Solution:
# @param tokens, a list of string
# @return an integer
def evalRPN(self, tokens):
new_tokens = []
for dummy_index in range(len(tokens)):
new_tokens.append(tokens[dummy_index])
result = 0
if len(new_tokens) == 1:
result = new_tokens[0]
return int(result)
label = True
while label:
for dummy_index in range(len(new_tokens)):
if (new_tokens[dummy_index] == '+') or \
(new_tokens[dummy_index] == '-') or \
(new_tokens[dummy_index] == '*') or \
(new_tokens[dummy_index] == '/'):
if new_tokens[dummy_index] == '+':
result = int(new_tokens[dummy_index-2]) + int(new_tokens[dummy_index-1])
elif new_tokens[dummy_index] == '-':
result = int(new_tokens[dummy_index-2]) - int(new_tokens[dummy_index-1])
elif new_tokens[dummy_index] == '*':
result = int(new_tokens[dummy_index-2]) * int(new_tokens[dummy_index-1])
elif new_tokens[dummy_index] == '/':
result = abs(int(new_tokens[dummy_index-2])) / abs((int(new_tokens[dummy_index-1])))
if (int(new_tokens[dummy_index-2]) > 0 and int(new_tokens[dummy_index-1]) < 0) or \
(int(new_tokens[dummy_index-2]) < 0 and int(new_tokens[dummy_index-1]) > 0):
result *= -1
new_tokens[dummy_index] = str(result)
del new_tokens[dummy_index - 1]
del new_tokens[dummy_index - 2]
if len(new_tokens) == 1:
label = False
break
return int(result)