算法打卡Day11| 栈和队列篇-逆波兰表达式求值

46 阅读1分钟

150. 逆波兰表达式求值

题目链接:leetcode.cn/problems/ev…

思路

用栈的操作,想到的是遍历,如果当前是数字且下一个是操作符,就pop()进行运算,运算完再放进去。但是没必要则麻烦,直接分为数字和运算符,逐一遍历,数字就push,运算符就pop

class Solution {
    public int evalRPN(String[] tokens) {
        //是数字就放进栈里 不是就做操作
        Stack<Integer> stack = new Stack();
        for(int i=0; i<tokens.length; i++){
            if(Objects.equals(tokens[i], "-") || Objects.equals(tokens[i], "+") 
                    || Objects.equals(tokens[i], "*") || Objects.equals(tokens[i], "/")){
                Integer pop = stack.pop();
                Integer pop1 = stack.pop();
                Integer result = 0;
                //⏰此处注意操作顺序,是pop1在前进行运算操作
                if (Objects.equals(tokens[i], "-")) result=pop1-pop;
                if (Objects.equals(tokens[i], "+")) result=pop1+pop;
                if (Objects.equals(tokens[i], "*")) result=pop1*pop;
                if (Objects.equals(tokens[i], "/")) result=pop1/pop;
                stack.push(result);
            }else{
                stack.add(Integer.valueOf(tokens[i]));
            }
        }
        return stack.pop();
    }
}