🚩传送门:牛客题目

题目

根据逆波兰表示法,求该后缀表达式的计算结果。
有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。

说明:

  • 整数除法只保留整数部分。
  • 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。

示例 :

输入:tokens = [“2”,”1”,”+”,”3”,”“] 输出:9 解释:该算式转化为常见的中缀算术表达式为:((2 + 1) 3) = 9

解题思路:

根据题目所知,输入的逆波兰表达式总是有效的,所以无需考虑特殊的场景,此题明显是一道用 的题目。

  1. 遇到数字入栈
  2. 遇到操作符,根据操作符将栈中前两项拿出来进行计算,计算结果入栈

最终将表达式计算完毕,栈中剩余唯一数字就是结果,将其返回即可

我的代码

  1. class Solution {
  2. public static void caculate(int a, int b, String op, Stack<String> stack){
  3. switch (op){
  4. case "+":
  5. stack.add((a+b)+"");
  6. break;
  7. case "-":
  8. stack.add((a-b)+"");
  9. break;
  10. case "*":
  11. stack.add((a*b)+"");
  12. break;
  13. case "/":
  14. stack.add((a/b)+"");
  15. break;
  16. default:
  17. break;
  18. }
  19. }
  20. public static int evalRPN(String[] tokens) {
  21. Stack<String> stack=new Stack<>();
  22. for(String token:tokens){
  23. switch (token){
  24. case "+":
  25. case "-":
  26. case "*":
  27. case "/":
  28. int b=Integer.parseInt(stack.pop());
  29. int a=Integer.parseInt(stack.pop());
  30. caculate(a,b,token,stack);
  31. break;
  32. default:
  33. stack.add(token);
  34. break;
  35. }
  36. }
  37. return Integer.parseInt(stack.pop());
  38. }
  39. }