思路:又是有消消乐的感觉,只不过这里是遇到一个操作符号,就消掉两个数字合并成一个新数;所以想到用栈结构来处理;用一个栈来放当前遍历过的数字,当遍历遇到操作符时,就把前面最新入栈的两个数取出来操作,操作完的结果再放回栈内。最后栈内只剩下一个值就是最终的计算结果
class Solution {
public int evalRPN(String[] tokens) {
Stack<Integer> stack = new Stack();
for(String str : tokens){
//如果不是操作符号,就把当前数字入栈,等待被取出操作
if(!"+".equals(str) && !"-".equals(str) && !"*".equals(str) && !"/".equals(str)){
stack.push(Integer.valueOf(str));
}
//如果遇到操作符号,就把前面入栈的两个数取出来操作,操作完的结果再放回栈内
else {
int num1 = stack.pop();
int num2 = stack.pop();
int pushNum = 0;
//看例子,num1,num2先后顺序理解一下先;num1是后入栈的,所以放在操作号后面
if("+".equals(str)) {
pushNum = num2 + num1;
}else if("-".equals(str)){
pushNum = num2 - num1;
}else if("*".equals(str)){
pushNum = num2 * num1;
}else if("/".equals(str)){
pushNum = num2 / num1;
}
//操作完的结果再放回栈内
stack.push(pushNum);
}
}
//最后栈内只剩下一个值就是最终的计算结果
return stack.pop();
}
}