逆波兰表达式求值

题目链接

逆波兰表达式求值

题目描述

逆波兰表达式求值_第1张图片
逆波兰表达式求值_第2张图片

注意点

  • tokens[i] 是一个算符(“+”、“-”、“*” 或 “/”),或是在范围 [-200, 200] 内的一个整数
  • 两个整数之间的除法总是 向零截断
  • 表达式中不含除零运算
  • 输入是一个根据逆波兰表示法表示的算术表达式

解答思路

  • 因为本题输入是一个根据逆波兰表示法表示的算术表达式,所以在遇到符号时,前面一定会有两个数字,根据符号对前面两个数字进行相应的运算,计算有先进后出的思想,所以使用栈存储碰到符号前的数字,在遇到符号时,将栈顶的两个数字弹出进行运算即可

代码

class Solution {
    public int evalRPN(String[] tokens) {
        Deque<Integer> deque = new ArrayDeque<>();
        for (int i = 0; i < tokens.length; i++) {
            String token = tokens[i];
            if (!"+".equals(token) && !"-".equals(token) &&  !"*".equals(token) &&  !"/".equals(token)) {
                deque.addLast(Integer.valueOf(tokens[i]));
                continue;
            }
            int secondNum = deque.pollLast();
            int firstNum = deque.pollLast();
            int tmp = 0;
            switch(token) {
                case "+":
                    tmp = firstNum + secondNum;
                    break;
                case "-":
                    tmp = firstNum - secondNum;
                    break;
                case "*":
                    tmp = firstNum * secondNum;
                    break;
                case "/":
                    tmp = firstNum / secondNum;
                    break;
            }
            deque.addLast(tmp);
        }
        return deque.pollLast();
    }
}

关键点

  • 栈的相关操作

你可能感兴趣的:(算法,数据结构,leetcode,算法,java)