经典数据结构-栈计算逆波兰表达式

用栈计算逆波兰表达式的基本思路是:按顺序遍历整个表达式,

若遇到操作数(假设都是二元运算符)则入栈;若遇到操作符(+ - * /)

连续弹出两个操作数并执行相应的运算,然后将其运算结果入栈。

重复以上过程,直到表达式遍历完,栈内只剩下一个操作数时,那

就是最终的运算结果,弹出打印即可。

java 复制代码
import java.util.Stack;

public class Solution17 {
    public static int evaluateRPN(String[] tokens){
        Stack<Integer> stack = new Stack<>();
        for(String token : tokens){
            if(isOperator(token)){
                int b=stack.pop();
                int a=stack.pop();
                int result=applyOpeartor(token,a,b);
                stack.push(result);
            }
            else{
                stack.push(Integer.parseInt(token));
            }
        }
        return stack.pop();
    }

    private static boolean isOperator(String token){
        return "+-*/".contains(token);
    }
    private static int applyOpeartor(String operator, int a, int b){
        switch (operator){
            case "+":
                return a+b;
            case "-":
                return a-b;
            case "*":
                return a*b;
            case "/":
                return a/b;
            default:
                throw new IllegalArgumentException("Invalid operator: " + operator);
        }
    }
    public static void main(String[] args) {
        String[] tokens = {"8", "2", "+", "2","*"};
        int result = evaluateRPN(tokens);
        System.out.println(result);
    }
}
相关推荐
花间相见8 小时前
【LeetCode02】—— 两数之和:哈希表入门经典详解
数据结构·散列表
zhengzhouliuhaha9 小时前
智能医疗设备控费系统:以全院一体化管控,筑牢医疗资源“安全阀”
大数据·数据结构·人工智能·算法·安全·机器学习·软件需求
Yiyaoshujuku11 小时前
化合物数据集API接口(数据结构及样例)
java·网络·数据结构
fu的博客11 小时前
【数据结构16】图:基于邻接矩阵、邻接表实现DFS/BFS
数据结构·算法
言存12 小时前
力扣热题283 移动零
数据结构·算法·leetcode
Lewiis13 小时前
白话桶排序
数据结构·算法·golang·排序算法
iiiiyu13 小时前
IO流相关编程题
java·大数据·开发语言·数据结构·数据库·mysql
Darling噜啦啦14 小时前
JS 数据结构实战:从栈队列到链表,一文吃透数组底层原理与线性数据结构
前端·javascript·数据结构
洛水水14 小时前
【力扣100题】80.寻找旋转排序数组中的最小值
数据结构·算法·leetcode
legend050709ComeON15 小时前
常见面试题-leetcode
数据结构·算法·leetcode