🚩传送门:牛客题目
题目
根据逆波兰表示法,求该后缀表达式的计算结果。
有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
- 整数除法只保留整数部分。
- 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
示例 :
输入:tokens = [“2”,”1”,”+”,”3”,”“] 输出:9 解释:该算式转化为常见的中缀算术表达式为:((2 + 1) 3) = 9
解题思路:
根据题目所知,输入的逆波兰表达式总是有效的,所以无需考虑特殊的场景,此题明显是一道用 栈 的题目。
- 遇到数字入栈
- 遇到操作符,根据操作符将栈中前两项拿出来进行计算,计算结果入栈
最终将表达式计算完毕,栈中剩余唯一数字就是结果,将其返回即可
我的代码
class Solution {
public static void caculate(int a, int b, String op, Stack<String> stack){
switch (op){
case "+":
stack.add((a+b)+"");
break;
case "-":
stack.add((a-b)+"");
break;
case "*":
stack.add((a*b)+"");
break;
case "/":
stack.add((a/b)+"");
break;
default:
break;
}
}
public static int evalRPN(String[] tokens) {
Stack<String> stack=new Stack<>();
for(String token:tokens){
switch (token){
case "+":
case "-":
case "*":
case "/":
int b=Integer.parseInt(stack.pop());
int a=Integer.parseInt(stack.pop());
caculate(a,b,token,stack);
break;
default:
stack.add(token);
break;
}
}
return Integer.parseInt(stack.pop());
}
}