zoukankan      html  css  js  c++  java
  • [LC] 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


    class Solution:
        def evalRPN(self, tokens: List[str]) -> int:
            stack = []
            import string
            nums = string.digits
            operator = ['+', '-', '*', '/']
    
            for token in tokens:
                if token in operator:
                    last_one = stack.pop()
                    last_two = stack.pop()
                    cur_val = self.helper(last_one, last_two, token)
                    stack.append(cur_val)
                else:
                    stack.append(int(token))
            return stack.pop()
        
        def helper(self, last_one, last_two, operator):
            if operator == '+':
                return last_two + last_one
            elif operator == '-':
                return last_two - last_one
            elif operator == '*':
                return last_two * last_one
            elif operator == '/':
                # special case to get ceiling value 
                if last_two * last_one < 0 and last_two % last_one != 0:
                    return last_two // last_one + 1
                else:
                    return last_two // last_one
            else:
                return
  • 相关阅读:
    4组Alpha冲刺2/6
    4组Alpha冲刺1/6
    4组Alpha冲刺3/6
    4组Alpha冲刺3/6
    4组Alpha冲刺4/6
    原创视频作品汇总(更新至2012.8.04)
    PPT全转通2.0发布
    PPT全转通1.3
    [原创]WIN8系统的远程桌面漏洞 利用QQ拼音纯净版实现提权
    原创钢琴曲 《夏季来临之前的歌》
  • 原文地址:https://www.cnblogs.com/xuanlu/p/11757292.html
Copyright © 2011-2022 走看看