0150. Evaluate Reverse Polish Notation

0150. Evaluate Reverse Polish Notation #

题目 #

给定字符串数组 tokens,表示一个根据 逆波兰表示法 表示的算术表达式。

返回表达式的值。

注意:

  • 有效的算符为 '+''-''*''/'
  • 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
  • 两个整数之间的除法总是 向零截断
  • 表达式中不含除零运算。
  • 输入是一个根据逆波兰表示法表示的算术表达式。
  • 答案及所有中间计算结果可以用 32 位 整数表示。

思路 #

  • 逆波兰表达式主要有以下两个优点:
    • 去掉括号后表达式无歧义。
    • 适合用栈操作运算:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中

代码 #

class Solution {
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();

        for(String token: tokens) {
            switch (token) {
                case "+" :
                    stack.push(stack.pop() + stack.pop());
                    break;
                case "-" :
                    int operand_2 = stack.pop(), operand_1 = stack.pop();
                    stack.push(operand_1 - operand_2);
                    break;
                case "*":
                    stack.push(stack.pop() * stack.pop());
                    break;
                case "/":
                    operand_2 = stack.pop(); operand_1 = stack.pop();
                    stack.push(operand_1 / operand_2);
                    break;
                default:
                    stack.push(Integer.parseInt(token));
            }
        }

        return stack.pop();
    }
}