• 150.Evaluate Reverse Polish Notation---逆波兰式求值


    题目链接

    题目大意:计算逆波兰表达式的值。

    法一:stack,用stack存数,遇到操作符,则运算。代码如下(耗时12ms):

     1     public int evalRPN(String[] tokens) {
     2         Stack<Integer> s = new Stack<Integer>();
     3         for(int i = 0; i < tokens.length; i++) {
     4             //如果是数值
     5             if(!tokens[i].equals("+") && !tokens[i].equals("-") && !tokens[i].equals("*") && !tokens[i].equals("/")) {
     6                 s.push(Integer.parseInt(tokens[i]));
     7             }
     8             //如果是操作符
     9             else {
    10                 int b = s.pop();
    11                 int a = s.pop();
    12                 int c = compute(a, b, tokens[i]);
    13                 s.push(c);
    14             }
    15         }
    16         return s.pop();
    17     }
    18         //运算
    19     private static int compute(int a, int b, String s) {
    20         if(s.equals("+")) {
    21             return a + b;
    22         }
    23         else if(s.equals("-")) {
    24             return a - b;
    25         }
    26         else if(s.equals("*")) {
    27             return a * b;
    28         }
    29         else {
    30             return a / b;
    31         }
    32     }
    View Code

    法二:stack+异常。很新颖的异常用法。代码如下(耗时70ms):

     1     public int evalRPN(String[] tokens) {
     2         Stack<Integer> s = new Stack<Integer>();
     3         for(int i = 0; i < tokens.length; i++) {
     4             //捕捉异常,来辨别是数值还是操作符
     5             try {
     6                 s.push(Integer.parseInt(tokens[i]));
     7             }
     8             catch(Exception e) {
     9                 int b = s.pop();
    10                 int a = s.pop();
    11                 int c = compute(a, b, tokens[i]);
    12                 s.push(c);
    13             }
    14         }
    15         return s.pop();
    16     }
    17     private static int compute(int a, int b, String s) {
    18         if(s.equals("+")) {
    19             return a + b;
    20         }
    21         else if(s.equals("-")) {
    22             return a - b;
    23         }
    24         else if(s.equals("*")) {
    25             return a * b;
    26         }
    27         else {
    28             return a / b;
    29         }
    30     }
    View Code
  • 相关阅读:
    xx系统需求分析01—用户权限管理(一)
    软件工程第五周总结
    Hbase的常用shell命令+Java操作
    软件需求阅读笔记02
    MyBatis学习总结03-动态SQL
    MyBatis学习总结02
    MyBatis学习总结01
    软件工程第四周总结
    软件需求阅读笔记01
    MapReduce案例-流量统计
  • 原文地址:https://www.cnblogs.com/cing/p/8578590.html
Copyright © 2020-2023  润新知