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
public class Solution {
public int evalRPN(String[] tokens) {
Stack<Integer> stack = new Stack<Integer>();
for(int i = 0;i < tokens.length;i++) {
try{
int number = Integer.parseInt(tokens[i]);
//不是整数抛出异常
stack.add(number);
}catch(Exception E){
int b = stack.pop();
int a = stack.pop();
stack.add(get(a,b,tokens[i]));
}
}
return stack.pop();
}
public int get(int a,int b,String operator) {
switch(operator){
case "+":return a+b;
case "-":return a-b;
case "*":return a*b;
case "/":return a/b;
default: return 0;
}
}
}
注意:
如果是数字入栈,
如果是符号从栈中弹出两个数。