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

 

posted on 2018-03-16 09:40  二十年后20  阅读(113)  评论(0编辑  收藏  举报

导航