🚩传送门:牛客题目
题目
根据逆波兰表示法,求该后缀表达式的计算结果。
有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
- 整数除法只保留整数部分。
- 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 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());}}
