【JAVA】---逆波兰表达式

news2024/11/27 18:46:59

一. 逆波兰表达式的介绍

逆波兰表达式又称为后缀表达式,代表的含义是操作数在前,运算符在后。

比如:1+2,用逆波兰表达式来写的话,就是12+。
而1+2这种写法称为中缀表达式,即运算符在两个操作数之间,也是我们平常最常采用的写法。

中缀表达式逆波兰表达式
A+BAB+
A*BAB*
A+B*CABC*+
A*(B+C)ABC*+

二. 逆波兰表达式的优点

逆波兰表达式的优点是可以把复杂表达式转换为可以依靠简单的操作得到计算结果的表达式。

只用两种简单操作: 入栈和出栈,就可以搞定任何普通表达式的运算。

三. 逆波兰表达式的求值步骤

在这里插入图片描述

逆波兰式的求解过程可以用栈来实现。为了便于理解,举一个带数值的例子:

计算:1 + 2 * 3 + ( 4 * 5 +6 ) * 7 = ?
在这里插入图片描述

四. 例题—力扣

https://leetcode-cn.com/problems/evaluate-reverse-polish-notation/
在这里插入图片描述

4.1 解题思路

  • 先建立一个栈,存放数据
  • 一一遍历,当遍历的为数字的时候,放入栈中,
  • 如果遇到运算符,则从栈中出两个数,先出的数,放运算符右边,计算完的结果,再次放入栈中,继续操作,遇到便数字压入栈中,遇到符号,弹出栈顶两元素并压入其结果。
  • 直至结束

4.2 代码

class Solution {
     public int evalRPN(String[] tokens) {
        Stack<Integer> stack=new Stack<>();
        for(String s:tokens){
            if(!isO(s)){
            //数字 字符
            //用parseInt
                stack.push(Integer.parseInt(s));
            }
            else{
            //运算符
                int num2=stack.pop();
                int num1=stack.pop();//因为先出栈的是放运算符的右边,所以num1和num2的顺序很重要
                switch(s) {
                    case "+":
                        stack.push(num1 + num2);
                        break;
                    case "-":
                        stack.push(num1 - num2);
                        break;
                    case "*":
                        stack.push(num1 * num2);
                        break;
                    case "/":
                        stack.push(num1 / num2);
                        break;
                }
            }
        }
        return stack.pop();
    }
    //判断是否为运算符---isO
    private boolean isO(String s) {
        if(s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")) {
            return true;
        }
        return false;
    }

💓
感谢阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/615569.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Office Visio 2019安装教程

哈喽&#xff0c;大家好。今天一起学习的是Visio 2019的安装&#xff0c;这是一个绘制流程图的软件&#xff0c;用有效的绘图表达信息&#xff0c;比任何文字都更加形象和直观。Office Visio 是office软件系列中负责绘制流程图和示意图的软件&#xff0c;便于IT和商务人员就复杂…

测试老鸟总结,自动化测试难点挑战应对方法,我的进阶之路...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Python自动化测试&…

Redis 高级数据结构 HyperLogLog

介绍 HyperLogLog(Hyper[ˈhaɪpə(r)])并不是一种新的数据结构(实际类型为字符串类型)&#xff0c;而是一种基数算法,通过HyperLogLog可以 利用极小的内存空间完成独立总数的统计&#xff0c;数据集可以是IP、Email、ID等。如果你负责开发维护一个大型的网站&#xff0c;有一天…

Vue.js 如何进行打包部署

Vue.js 中的打包部署 Vue.js 是一款流行的前端框架&#xff0c;它提供了一种简单、灵活的方式来构建用户界面。在开发完成后&#xff0c;需要对 Vue.js 应用程序进行打包部署&#xff0c;以便在生产环境中使用。本文将介绍 Vue.js 中的打包部署以及如何进行打包部署。 打包部署…

运维小白必学篇之基础篇第十七集:NFS和DHCP实验

NFS和DHCP实验 目录 NFS和DHCP实验 环境配置&#xff1a; 实验题1&#xff1a;实现NFS服务 实验题2&#xff1a;实现DHCP服务 实验作业&#xff1a; 计算机1配置如下&#xff1a;&#xff08;计算机名为姓名首拼&#xff0c;例hy01&#xff0c;hy02...&#xff09;基础环…

为什么初学者都先学C语言?

不少高校选择C语言&#xff0c;主要C语言是一种相对底层的语言&#xff0c;学习它可以让学习者更好的理解计算机的基本原理和编程的基础概念&#xff0c;比如变量、函数、指针等。这些基础知识对于理解其他高级语言和解决复杂的编程问题都非常重要。 另外就是C语言对算法和数据…

最小化微服务漏洞

最小化微服务漏洞 目录 本节实战 实战名称&#x1f498; 案例&#xff1a;设置容器以普通用户运行-2023.5.29(测试成功)&#x1f498; 案例&#xff1a;避免使用特权容器&#xff0c;选择使用capabilities-2023.5.30(测试成功)&#x1f498; 案例&#xff1a;只读挂载容器文件…

Redis进阶:主从复制、集群搭建

Redis进阶 1. 主从复制机制1.1 复制原理1.2 配置“一主多从”试验主从复制1&#xff09;为每个Redis进程提供配置文件2&#xff09;分别在不同客户端启动Redis服务3&#xff09;配置服务器成为某主机的下属从机 1.3 不同模式1.3.1 一主二仆1.3.2 薪火相传1.3.3 反客为主 1.4 哨…

在京东做外包的那些日子....

不知不觉已经在京东做了两年外包&#xff0c;最近收到不少朋友私信&#xff0c;说马上面临就业&#xff0c;在找工作的过程中&#xff0c;有不少软件测试的外包公司给我打电话让去面试&#xff0c;究竟要不要去&#xff1f;这篇文章给大家说说我这2年的外包经验&#xff0c;希望…

【Java基础学习打卡01】计算机概述

目录 引言一、计算机是什么&#xff1f;1.计算机vs计算器2.计算机定义 二、计算机发展简史三、计算机分类四、计算机基本工作原理1.冯诺依曼2.冯诺依曼原理 总结 引言 其实我们在学习Java编程之前应该要对计算机有所了解&#xff0c;这里的了解不是说我们日常接触电脑就算是了…

机器视觉初步2:机器视觉基础知识

本节概况 1.机器视觉的定义2.机器视觉系统的工作流程3.机器视觉的组成视场和最大像面 1.机器视觉的定义 什么是机器视觉&#xff0c;其中美国的一种定义为&#xff1a; “机器视觉是研究如何通过光学装置和非接触式传感器自动地接收、处理真实场景的图像&#xff0c;以获得所需…

前端使用tailwindcss 快速实现主题切换方案

使用Tailwind CSS在黑暗模式下为你的网站设计样式。 现在&#xff0c;黑暗模式是许多操作系统的第一流功能&#xff0c;为你的网站设计一个黑暗版本以配合默认设计&#xff0c;变得越来越普遍。 为了使这一点尽可能简单&#xff0c;Tailwind包括一个暗色变体&#xff0c;让你…

POWERBUILDER基础学习提纲

Chengg0769 2012年 版权信息保留&#xff1a; www.mis2erp.com http://blog.csdn.net/chengg0769 http://www.haojiaocheng.cc 这当时是给列给一位因伤休养的朋友。他有一段难捱的时间&#xff0c;想学习学习。这样复出之后也不至于工作无望或者浪费这段时间。 在SQL2000基础…

什么是API接口测试

什么是 API &#xff1f; API 是“应用程序编程接口”的缩写&#xff0c;是一种允许不同应用程序之间相互通信和交换数据的接口。就好像在餐厅点餐一样&#xff0c;你只需要告诉服务员你想要的食物&#xff0c;而不需要了解厨房中的具体操作&#xff0c;服务员会把你的订单传递…

【PyQt5】(02)Qt Designer:快速设计GUI界面的利器

系列文章目录 【PyQt5】&#xff08;01&#xff09;PyQt的详细介绍 文章目录 系列文章目录前言一、安装Qt Designer二、Qt Designer的基本用法2.1 新建窗体2.2 添加部件2.3 编辑属性2.4 布局管理2.5 设置样式2.6 保存文件 三、将UI文件转化为Python代码并显示3.1 使用uic将UI文…

请问一下java在线编程的网站有哪一些?

前言 下面为大家整合了一些Java在线编程的的网站&#xff0c;个人认为都是挺好用的&#xff0c;整合不易&#xff0c;希望大家能顺手留下点赞和收藏&#xff01; 废话少说&#xff0c;我们直接进入正题&#xff1a; 1、菜鸟工具 菜鸟工具的这个在线编程工具页面很为简洁&…

linux查看/修改某个进程运行的CPU核

1.ps -eF #查看fwd进程运行在哪个cpu核上 [rootCENTOS57 rpm]# ps -eF | grep fwd 2.top命令 (1)top (2)按f键可以选择下面配置选项 P Last Used Cpu (SMP) (3)Esc 退回到top界面可以看到多了一列进程所在cpu信息 3.pidstat命令 查看进程使用cpu情况&#xff0c;如果绑定了多…

CH32V3xx RT-Thread下的ethernet调试及问题记录

目录 1、CH32V3xx 以太网模块简介2、TCP Client 程序2.1 WCHNET库2.1.1 添加WCHNET2.1.2 以太网配置2.2 TCP Client代码2.3 测试结果3、调试过程中的一些问题1、CH32V3xx 以太网模块简介 CH32V3xx MCU的以太网收发器是微控制器的一个重要高速高速通讯外设,集成了千兆的MAC(媒体…

堆积如山:探索数据结构中的堆

前言 欢迎来到小K的数据结构专栏的第十一小节&#xff0c;本节将为大家带来堆的详解并带来堆题目的讲解&#xff08;✨当然也为大家准备了完整的源码 &#xff09;~希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f43e; 目录…

排查一次nacos动态配置不生效

一、问题描述 新需求需要使用到nacos动态配置&#xff0c;但是开发完成之后联调过程中发现动态配置没有生效。 二、问题排查 首先在本地测试&#xff0c;发现启动服务后修改nacos配置确实不生效&#xff0c;在查看启动日志时发现服务启动时打印了下面这样的日志。这里是在配…