题目
解题思路
本题通过一个栈就可以解决计算问题,找到规律之后还是比较简单的。主要思路如下:
- 定义一个栈用来接收计算数,因为题目已经说明不会出现计算错误情况,所以不用担心报空栈的错误。
- 当读取到数字的时候,将数字压入栈中。
- 如果读取到一个运算符,将栈中的前两个元素推出栈,根据运算符进行计算,注意,操作顺序是,后弹出的数字操作(±*/)先弹出的数字。
- 将计算的后的数字再压入栈中。
- 重复上面的操作,知道tokens数组全部遍历完毕。
- 最后返回栈中唯一的元素,直接pop()即可。
代码
class Solution {
public int evalRPN(String[] tokens) {
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < tokens.length; i++) {
if (tokens[i].equals("+") || tokens[i].equals("-") || tokens[i].equals("*") || tokens[i].equals("/")) {
Caculator(stack , tokens[i]);
} else {
stack.push(Integer.parseInt(tokens[i]));
}
}
return stack.pop();
}
// 根据传入的运算符,弹出栈的前两个元素,并将计算的结果压入栈
// 后弹出的对先弹出的进行操作
// 将栈作为参数进行传递的时候,要将泛型带上,否则函数无法识别
public void Caculator(Stack<Integer> stack, String operator) {
int left = stack.pop();
int right = stack.pop();
// Integer left = stack.pop();
// System.out.print(stack.pop());
int sum = 0;
switch (operator) {
case "+" :
sum = left + right;
break;
case "-" :
sum = right - left;
break;
case "*" :
sum = right * left;
break;
case "/" :
sum = right / left;
break;
}
// 将算出的结果重新压入栈中
stack.push(sum);
}
}