zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    预备作业03
    预备作业02
    寒假作业01
    1179 最大的最大公约数(水题)
    HttpWebRequest
    python模拟银行家算法
    Lock锁与Condition监视器(生产者与消费者)。
    synchronized(){}同步代码块笔记(新手笔记,欢迎纠正)
    详解~实现Runnable方法创建线程之为什么要将Runnable接口的子类对象传递给Thread的构造函数
    语义web基础知识学习
  • 原文地址:https://www.cnblogs.com/cing/p/8578590.html
Copyright © 2011-2022 走看看