美文网首页
150. Evaluate Reverse Polish Not

150. Evaluate Reverse Polish Not

作者: 云外雁行斜丶 | 来源:发表于2019-06-08 08:49 被阅读0次

    150. Evaluate Reverse Polish Notation

    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
    

    Example 3:

    Input: ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]
    Output: 22
    Explanation: 
      ((10 * (6 / ((9 + 3) * -11))) + 17) + 5
    = ((10 * (6 / (12 * -11))) + 17) + 5
    = ((10 * (6 / -132)) + 17) + 5
    = ((10 * 0) + 17) + 5
    = (0 + 17) + 5
    = 17 + 5
    = 22
    

    First Accept

    使用python2时要注意,对于负数的除法会进行向上取整。比如6/-132 = -1

    class Solution(object):
        def evalRPN(self, tokens):
            """
            :type tokens: List[str]
            :rtype: int
            """
            stack = []
            operater = {'+', '-', '*', '/'}
            for c in tokens:
                if c in operater:
                    end = stack.pop()
                    start = stack.pop()
                    stack.append(str(int(eval(start+c+end))))
                else:
                    stack.append(c)
            print(stack)
            return int(stack[-1])
    
    
    s = Solution()
    print(s.evalRPN(
     ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]))
    

    Fastest

    class Solution:
        def evalRPN(self, tokens: List[str]) -> int:
            stack = []
            curr = None
            operators = ['+', '-', '*', '/']
            for ele in tokens:
                if len(stack) >= 2:
                    if ele in operators:
                        b, a = stack.pop(), stack.pop()
                        if ele == '+':
                            curr = a + b
                            stack.append(curr)
                        elif ele == '-':
                            curr = a - b
                            stack.append(curr)
                        elif ele == '*':
                            curr = a * b
                            stack.append(curr)
                        elif ele == '/':
                            if a * b > 0:
                                curr = a // b
                            else:
                                curr = -(abs(a) // abs(b))
                            stack.append(curr)
                    else:
                        stack.append(int(ele))
    
                else:
                    if ele in operators:
                        return None
                    else:
                        stack.append(int(ele))
            
            return stack.pop()
    

    相关文章

      网友评论

          本文标题:150. Evaluate Reverse Polish Not

          本文链接:https://www.haomeiwen.com/subject/inwbxctx.html