56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
import math
|
|
class Solution(object):
|
|
def evalRPN(self, tokens):
|
|
"""
|
|
:type tokens: List[str]
|
|
:rtype: int
|
|
"""
|
|
valid_tokens = {
|
|
'+': lambda x, y: x + y,
|
|
'-': lambda x, y: x - y,
|
|
'*': lambda x, y: x * y,
|
|
'/': lambda x, y: x / y,
|
|
}
|
|
tmp = []
|
|
|
|
# while len(tokens) != 1:
|
|
blanks = 0
|
|
count = 0
|
|
for x in range(len(tokens)):
|
|
# print(tokens[x])
|
|
if tokens[x] in valid_tokens:
|
|
operator = valid_tokens[tokens[x]]
|
|
if len(tmp) > 1 and count == 0:
|
|
a = tmp.pop()
|
|
b = tmp.pop()
|
|
tokens.append(math.floor(operator(b, a)))
|
|
# print(tmp)
|
|
# print(tokens)
|
|
tokens[x] = None
|
|
count += 1
|
|
else:
|
|
a = tmp.pop()
|
|
b = tokens.pop()
|
|
tokens.append(math.ceil(operator(a, b)))
|
|
tokens[x] = None
|
|
else:
|
|
tmp.append(int(tokens[x]))
|
|
tokens[x] = None
|
|
# print(tokens)
|
|
# print(tmp)
|
|
for y in tokens:
|
|
if y is None:
|
|
blanks += 1
|
|
# print(blanks)
|
|
tokens = tokens[blanks:]
|
|
if tokens[0] < 0:
|
|
tokens[0] *= -1
|
|
return int(tokens[0])
|
|
|
|
obj = Solution()
|
|
# print(obj.evalRPN(["2","1","+","3","*"])) # 9
|
|
# print(obj.evalRPN(["4","13","5","/","+"])) # 6
|
|
# print(obj.evalRPN(["10","6","9","3","+","-11","*","/","*","17","+","5","+"])) # 22
|
|
# print(obj.evalRPN(["0","3","/"])) # 0
|
|
print(obj.evalRPN(["3","11","+","5","-"])) # 9
|
|
print(obj.evalRPN(["3","-4","+"])) # -1 |