leetcode-mid-others-150. Evaluate Reverse Polish Notation

mycode   42.30%、

注意:如果不考虑符号,-1//3=-1而不是等于0,因为是向下取整

class Solution(object):
    def evalRPN(self, tokens):
        """
        :type tokens: List[str]
        :rtype: int
        """
        from collections import deque
        def cal(data_1,data_2,item):
            if item == '/':
                return abs(data_2) // abs(data_1) *(-1 if (data_2 > 0) ^ (data_1 > 0) else 1)
            elif item == '+':
                return data_2 + data_1
            elif item == '-':
                return data_2 - data_1
            else:
                return data_2 * data_1
        dq = deque()
        calset = ['/','+','-','*']
        for item in tokens:
            if item in calset:
                #print('if')
                data_1 = dq.pop()
                data_2 = dq.pop()
                data = cal(int(data_1),int(data_2),item)
                dq.append(data)        
            else:
                #print('else')
                dq.append(item) 
            #print(dq)
        return dq[0]

参考:

#https://www.cnblogs.com/zuoyuan/p/3760530.html  注意负数的除法,c++和pytho的区别
class Solution:
    # @param tokens, a list of string
    # @return an integer
    def evalRPN(self, tokens):
        stack = []
        for i in range(0,len(tokens)):
            if tokens[i] != '+' and tokens[i] != '-' and tokens[i] != '*' and tokens[i] != '/':
                stack.append(int(tokens[i]))
            else:
                a = stack.pop()
                b = stack.pop()
                if tokens[i] == '+':
                    stack.append(a+b)
                if tokens[i] == '-':
                    stack.append(b-a)
                if tokens[i] == '*':
                    stack.append(a*b)
                if tokens[i] == '/':
                    if a*b < 0:
                        stack.append(-((-b)/a))
                    else:
                        stack.append(b/a)
        return stack.pop()
原文地址:https://www.cnblogs.com/rosyYY/p/10984161.html