zoukankan      html  css  js  c++  java
  • 【leetcode】Evaluate Reverse Polish Notation

    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.
    Some examples:
    ["2", "1", "+", "3", "
    "] -> ((2 + 1) 3) -> 9
    ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
    *简单的来说就是计算逆波兰式的值。

    解题思路:


    这就是一个弹栈进栈的问题,根据弹出的元素类型和栈顶的元素的类型不同得出不同的结果。输入里卖弄无非就是数字和运算符这两种情况,组合一下有下面这几种情况:
    1.弹出的是数字,下一个还是数字:压栈,等待运算符进行计算
    2.弹出的是数字,下一个是运算符:压栈,等待运算符计算
    3.弹出的是运算符,下一个是数字:从栈中弹出两个操作数计算
    4.弹出的是运算符,下一个是运算符:从栈中取出两个操作数计算
    综合一下就是:数字就压栈,运算符就弹出两个数计算

    需要注意的:

    注意这里除法的取整方式,应该是先计算出浮点数的结果再取整int(op[-2]*1.0 / op[-1]*1.0)

     1 class Solution:
     2     # @param tokens, a list of string
     3     # @return an integer
     4     def evalRPN(self, tokens):
     5         ops = ['+','-','*','/']
     6         l = len(tokens)
     7         op = []
     8         for i in range(l):
     9             if tokens[i] == '+':
    10                 t = op[-1] + op[-2]
    11                 op.pop()
    12                 op.pop()
    13                 op.append(t)
    14             elif tokens[i] == '-':
    15                 t = op[-2] - op[-1]
    16                 op.pop()
    17                 op.pop()
    18                 op.append(t)
    19             elif tokens[i] == '*':
    20                 t = op[-1] * op[-2]
    21                 op.pop()
    22                 op.pop()
    23                 op.append(t)
    24             elif tokens[i] == '/':
    25                 t = int(op[-2]*1.0 / op[-1]*1.0)
    26                 op.pop()
    27                 op.pop()
    28                 op.append(t)
    29             else:
    30                 op.append(int(tokens[i]))
    31         return op[-1]
    32         
    33 def main():
    34     s = Solution()
    35     print s.evalRPN(["10","6","9","3","+","-11","*","/","*","17","+","5","+"])
    36     
    37 if __name__ == '__main__':
    38     main()
  • 相关阅读:
    【模板】快速幂&取余运算
    【模板】ST表
    LOJ #10070 最小生成树计数
    【模板】KMP字符串匹配
    PL/SQL编程要点和注意点
    数据不同方式的提取和提交的性能测试(转载)
    Oracle分析函数之开窗子句-即WINDOWING子句
    Oracle树反向查询的优化(转载)
    oracle默认的hr用户使用脚本安装
    展开BOM并使用最终用量的算法(转载)
  • 原文地址:https://www.cnblogs.com/MrLJC/p/4116431.html
Copyright © 2011-2022 走看看