【LeetCode-中等题】150. 逆波兰表达式求值

文章目录

题目

在这里插入图片描述

方法一:栈

在这里插入图片描述

class Solution {
    
    
    public int evalRPN(String[] tokens) {
    
    
        Deque<Integer> deque= new LinkedList<>();
        String rpn = "+-*/";//符号集  用来判断扫描的是否为运算符
        int sum = 0;
        for(int i = 0 ; i < tokens.length ; i++){
    
    
            if(!rpn.contains(tokens[i])) deque.push(Integer.valueOf(tokens[i]));// 如果当前字符不为运算符  则直接入栈 
            else{
    
    // 如果当前字符为运算符  则将栈顶两个元素弹出  根据    后出 +-*/ 先出 的规则运算,再将结果压入栈中
                sum = eval(tokens[i],deque);
                deque.push(sum);
            }
        }
        return deque.peek();//最后遍历完字符数组  最后栈中的唯一元素就是最终结果

    }
    //匹配运算
    public int eval(String s ,   Deque<Integer> deque){
    
    
        int  first = deque.pop();
        int  second = deque.pop();
        if(s.equals("+")){
    
    
          return second + first;
        }else if(s.equals("-")){
    
    
          return second - first;
        }else if(s.equals("*")){
    
    
          return second * first;
        }else{
    
    
          return second / first;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_45618869/article/details/132974851