def evalRPN(self, tokens):
stack = []
for t in tokens:
if t not in ["+", "", "*", "/"]:
stack.append(int(t))
else:
r, l = stack.pop(), stack.pop()
if t == "+":
stack.append(l+r)
elif t == "":
stack.append(lr)
elif t == "*":
stack.append(l*r)
else:
# here take care of the case like "1/22",
# in Python 2.x, it returns 1, while in
# Leetcode it should return 0
if l*r < 0 and l % r != 0:
stack.append(l/r+1)
else:
stack.append(l/r)
return stack.pop()
Python solution with comments (don't use eval() function).


same idea
def evalRPN(self, tokens): def divi(ia, ib): return ia / ib if ia ^ ib >= 0 else (ia/ib) operatorDict = {'+':operator.add, '':operator.sub, '*':operator.mul, '/':divi} sta = [] for token in tokens: if token in operatorDict: secondEle = sta.pop() sta.append(operatorDict[token](sta.pop(), secondEle)) else: sta.append(int(token)) return sta[0]

@caikehe You can use
int(float(l) / r)
for division instead of`if
statement.int()
will take the part of integer, which is wanted by this question.

Thank you for the great answers.
While you can still use eval but take '/' as another if condition:stack = [] for t in tokens: if t in ('+','','*','/'): v1 = stack.pop() v2 = stack.pop() if t=='/': v = int(float(v2)/float(v1)) else: v = eval(v2+t+v1) stack.append(str(v)) else: stack.append(t) return int(stack[0])