题目大意:计算逆波兰表达式的值。
法一: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 }