题意:使用Reverse Polish Notation计算数学表达式的值,
温馨提示:有效的操作符为+、-、*、/,操作数是整数
思路:逆序---->后进先出,数据结构:栈
注意问题:负数,不能单纯判断符号;数1 减去/除以 数2,改变了出栈的顺序。
public int evalRPN(String[] tokens) {
Deque
stack = new ArrayDeque
();
int tmp = 0;
for(int i = 0; i < tokens.length; i++){
if(tokens[i].length() != 1){
stack.push(Integer.parseInt(tokens[i]));
continue;
}
switch(tokens[i].charAt(0)){
case '+': tmp = stack.poll() + stack.poll(); stack.push(tmp);break;
case '-': tmp = stack.poll() - stack.poll();stack.push(-tmp);break;
case '*': tmp = stack.poll() * stack.poll();stack.push(tmp);break;
case '/': tmp = (int)(1.0 / stack.poll() * stack.poll());stack.push(tmp);break;
default: stack.push(Integer.parseInt(tokens[i]));break;
}
}
return stack.pop();
}