1.题目
2.解题思路
用栈存储数据,遇到运算符弹出两个数据进行运算,遇到数据则入栈
3.代码实现
Stack<Integer> num = new Stack<Integer>();
int num1, num2;
for (int i = 0; i < tokens.length; i++) {
switch(tokens[i]) {
case "+":
num1 = num.pop();
num2 = num.pop();
num.push(num2 + num1);
break;
case "-":
num1 = num.pop();
num2 = num.pop();
num.push(num2 - num1);
break;
case "*":
num1 = num.pop();
num2 = num.pop();
num.push(num2 * num1);
break;
case "/":
num1 = num.pop();
num2 = num.pop();
num.push(num2 / num1);
break;
default:
num.push(Integer.parseInt(tokens[i]));
break;
}
}
return num.pop();
4.优化解法
使用数组来模拟栈!!!
int[] numStack = new int[tokens.length / 2 + 1];
int index = 0;
for (String s : tokens) {
switch (s) {
case "+":
numStack[index - 2] += numStack[--index];
break;
case "-":
numStack[index - 2] -= numStack[--index];
break;
case "*":
numStack[index - 2] *= numStack[--index];
break;
case "/":
numStack[index - 2] /= numStack[--index];
break;
default:
// numStack[index++] = Integer.valueOf(s);
//valueOf改为parseInt,减少自动拆箱装箱操作
numStack[index++] = Integer.parseInt(s);
break;
}
}
return numStack[0];
作者:hteason
链接:https://leetcode-cn.com/problems/evaluate-reverse-polish-notation/solution/javachun-shu-zu-he-zhan-liang-chong-shi-xian-jian-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。