zoukankan      html  css  js  c++  java
  • Leetcode: 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

    难度:70. RPN中文名字叫做逆波兰表示法,它的好处维基百科说了,就是不需要括号来表示运算的先后,直接根据式子本身就可以求解。解题思路就是维护一个栈,遇到数字就入栈,遇到操作符就两次出栈得到栈顶的两个操作数,运用操作符进行运算以后,再把结果入栈。直到式子结束,此时栈中唯一一个元素便是结果。

    以上代码中有一个没有周全的地方是没有对逆波兰式错误的情况进行出错处理,其实也不难,就是每次pop操作检查栈空情况,如果栈空,则说明出错,throw an exception。还有就是最后检查一下栈的size,如果不是1也说明运算数多了,返回错误。

     1 public class Solution {
     2     public int evalRPN(String[] tokens) {
     3         int a,b;
     4         Stack<Integer> S = new Stack<Integer>();
     5         for (String s : tokens) {
     6             if(s.equals("+")) {
     7                 S.add(S.pop()+S.pop());
     8             }
     9             else if(s.equals("/")) {
    10                 b = S.pop();
    11                 a = S.pop();
    12                 S.add(a / b);
    13             }
    14             else if(s.equals("*")) {
    15                 S.add(S.pop() * S.pop());
    16             }
    17             else if(s.equals("-")) {
    18                 b = S.pop();
    19                 a = S.pop();
    20                 S.add(a - b);
    21             }
    22             else {
    23                 S.add(Integer.parseInt(s));
    24             }
    25         }    
    26         return S.pop();
    27     }
    28 }
  • 相关阅读:
    abstract关键字
    方法重写
    对象初始化过程
    访问修饰符
    super关键字
    继承
    转发和重定向的区别
    tomcat中乱码问题解决
    jsp执行过程
    web程序常见错误及解决方法
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/4023598.html
Copyright © 2011-2022 走看看