栈|逆波兰表达式求值

逆波兰表达式求值

  • 题目
  • 算法原理
  • 代码实现
    • 补充 stoi的实现

题目

逆波兰表达式求值
在这里插入图片描述
逆波兰表达式就是后缀表达式,我们平时写的带括号的是中缀表达式。区分中缀表达式和后缀表达式 就是 操作数 和 操作符 的先后关系。 操作符在后 就是后缀表达式

  • 后缀表达式 的用途就是 让计算机直到计算的先后顺序!
    比如 我们中缀表达式 a * (b - c) 以我们人类的智慧一眼就知道先算后面的括号,是跳跃式的。但是计算机是从左到右扫描整个表达式。所以我们就需要把这个表达式改为其他形式。
  • a* (b - c)改成后缀表达式就是 a bc - * 后面的操作符 是根据优先级排的,()的优先级最高
  • 再来个例子 a + b * c - d 改成后缀表达式就是 a bc*+d-

算法原理

  • 先定义一个stack ,遍历数组,遇到数字就入栈
  • 遇到操作符就出栈,先出的为右操作数,后出的为左操作数,然后计算的结果再入栈。
  • 最后返回栈顶元素就ok了

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码实现

int evalRPN(vector<string>& tokens) {set<string> s = { "+","-","*","/" };stack<int> st;for (auto& str : tokens) {if (s.find(str) != s.end()) {int right = st.top();st.pop();int left = st.top();st.pop();switch (str[0]) {case '+':st.push(left + right);break;case '-':st.push(left - right);break;case '*':st.push(left * right);break;case '/':st.push(left / right);break;}}else {st.push(stoi(str));}}return st.top();
}

可能有同学好奇字符怎么转整型的

补充 stoi的实现

stoi的实现

class Solution {
public:int myAtoi(string str) {int i = 0;while(str[i] == ' '){i++;}int flag = 1;switch (str[i]){case  '-':flag = -1;i++;break;case  '+':flag = 1;i++;break;}//i++;long long ret = 0;for(; i < str.size(); i++){if(str[i]>'9' || str[i]<'0'){break;}ret = 10* ret + (str[i] -'0') ;if(ret > INT_MAX){break;}}ret *= flag;if(ret > INT_MAX){ret = INT_MAX ;}if(ret < INT_MIN){ret = INT_MIN;}return ret ;}
};

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年Rust魅力:谷歌重写C++系统6大心得

讲动人的故事,写懂人的代码 2024年3月26日,谷歌安卓部门的编译器和运行时团队负责人Lars Bergstorm在英国伦敦的Rust Nation UK技术大会上,跟大家分享了他们的团队几百名工程师在几年内用Rust重写了几十个C++和Go系统的六点心得哦。 1 用Rust后生产力更高 自从我们用Rust重…

有道词典网页版接口分析与爬虫研究

说明&#xff1a;仅供学习使用&#xff0c;请勿用于非法用途&#xff0c;若有侵权&#xff0c;请联系博主删除 作者&#xff1a;zhu6201976 一、目标站点 有道词典网页版&#xff1a;网易有道 二、目标接口 url&#xff1a;https://dict.youdao.com/jsonapi_s?doctypejson&…

1.微服务

一、微服务是什么 微服务是一种架构风格&#xff0c;即&#xff0c;一个应用应该是一组小型服务&#xff0c;每个服务器只负责一种服务&#xff0c;服务之间可以通过 HTTP 的方式进行互通。每一个功能元素最终都是一个可独立替换和独立升级的软件单元。 可以说&#xff0c;微…

全国项目管理标准化技术委员会副秘书长肖杨先生受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 全国项目管理标准化技术委员会副秘书长、微薄之力&#xff08;北京&#xff09;管理咨询有限公司董事长肖杨先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“数字化时代下&#xff0c;由职能型组织向高度适应性组织转…

五款高性能开放式耳机推荐,户外畅听无拘束!

在追求运动乐趣的同时&#xff0c;我们也需要关注自身的安全。开放式蓝牙耳机作为一种新型的耳机类型&#xff0c;正逐渐受到运动爱好者的青睐。它的独特之处在于能够在佩戴时保持对周围环境的警觉性&#xff0c;让你在享受音乐的同时不忘安全。那么&#xff0c;如何选购一款适…

JavaWeb | 5 监听器与FreeMarker

JavaWeb | 5 监听器与FreeMarker 监听器 Listener开发监听器三要素六种常用监听接口内置对象监听接口属性监听接口 项目中监听器的应用场景 FreeMarker模板引擎FreeMarkerJSP与FreeMarkerFreeMarker快速上手FTL取值if分支判断switch分支判断list迭代内建函数 监听器 Listener 对…

推荐学习什么编程语言?

选择编程语言学习时&#xff0c;除了就业因素外&#xff0c;还可以考虑以下几个方面来决定学习哪些编程语言&#xff1a; 个人兴趣与目标&#xff1a;如果你对某个特定领域感兴趣&#xff0c;比如游戏开发、数据分析、人工智能等&#xff0c;可以选择与该领域紧密相关的编程语言…

B站广告推广操作教程及费用?

哔哩哔哩&#xff08;B站&#xff09;作为国内极具影响力的年轻人文化社区&#xff0c;已成为众多品牌与企业触达目标受众、提升品牌影响力的重要阵地。然而&#xff0c;面对B站复杂的广告系统与精细化运营需求&#xff0c;许多广告主可能对如何高效开展B站广告推广感到困惑。云…

2023图灵奖得主揭晓!史上首位计算机和数学最高奖“双料王”诞生

重磅消息&#xff01;北京时间4月10日下午5点整&#xff0c;ACM宣布把2023年图灵奖颁给Avi Wigderson&#xff0c;以表彰Wigderson对计算理论和随机性做出的奠基性贡献。 ACM图灵奖通常被称为“计算机领域的诺贝尔奖”&#xff0c;奖金为100万美元&#xff0c;通常颁发给计算机…

Asterisk 21.2.0编译安装经常遇到的问题和解决办法之json

目录 写在json之前Asterisk requires libjansson 写在json之前 在讨论jansson之前&#xff0c;我们先来看另外一个问题&#xff1a; checking for libedit… no checking for history_init in -ledit… no configure: error: *** Please install the ‘libedit’ development …

【MYSQL锁】透彻地理解MYSQL锁

&#x1f525;作者主页&#xff1a;小林同学的学习笔录 &#x1f525;mysql专栏&#xff1a;小林同学的专栏 目录 1.锁 1.1 概述 1.2 全局锁 1.2.1 语法 1.2.1.1 加全局锁 1.2.1.2 数据备份 1.2.1.3 释放锁 1.2.1.4 特点 1.2.1.5 演示 1.3 表级锁 1.3.1 介绍 …

03-JAVA设计模式-建造者模式

建造者模式 什么是建造者模式 建造者模式&#xff08;Builder Pattern&#xff09;是一种对象构建的设计模式&#xff0c;它允许你通过一步一步地构建一个复杂对象&#xff0c;来隐藏复杂对象的创建细节。 这种模式将一个复杂对象的构建过程与其表示过程分离&#xff0c;使得…

跨站请求伪造漏洞(CSRF)

什么是CSRF CSRF&#xff08;Cross-Site Request Forgery&#xff09;&#xff0c;也被称为 one-click attack 或者 session riding&#xff0c;即跨站请求伪造攻击。 漏洞原理 跨站请求伪造漏洞的原理主要是利用了网站对用户请求的验证不严谨。攻击者会在恶意网站中构造一个…

spring-cloud微服务openfeign

Spring Cloud openfeign对Feign进行了增强&#xff0c;使其支持Spring MVC注解&#xff0c;另外还整合了Ribbon和Nacos&#xff0c;从而使得Feign的使用更加方便 优势&#xff0c;openfeign可以做到使用HTTP请求远程服务时就像洞用本地方法一样的体验&#xff0c;开发者完全感…

获取请求数据

假设有这样一个请求&#xff1a;http://localhost:8080/springmvc/register?namezhangsan&password123&emailzhangsanqq.com 在SpringMVC中应该如何获取请求提交的数据&#xff1f;在SpringMVC中又应该如何获取请求头信息&#xff1f;在SpringMVC中又应该如何获取客户…

搭建第一个Web服务器(在eclipse或idea上部署Tomcat服务器)

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

深入理解Linux系统中的前后台任务与守护进程

⭐小白苦学IT的博客主页 ⭐初学者必看&#xff1a;Linux操作系统入门 ⭐代码仓库&#xff1a;Linux代码仓库 ❤关注我一起讨论和学习Linux系统 1.前言 在Linux系统中&#xff0c;进程管理是至关重要的一个环节。其中&#xff0c;前后台任务和守护进程是进程管理中不可忽视的两…

阿里云云效CI/CD配置

1.NODEJS项目流水线配置(vue举例) nodejs构建配置 官方教程 注意:下图的dist是vue项目打包目录名称,根据实际名称配置 # input your command here cnpm cache clean --force cnpm install cnpm run build 主机部署配置 rm -rf /home/vipcardmall/frontend/ mkdir -p /home/…

刷题之Leetcode707题(超级详细)

707.设计链表 力扣题目链接(opens new window)https://leetcode.cn/problems/design-linked-list/ 题意&#xff1a; 在链表类中实现这些功能&#xff1a; get(index)&#xff1a;获取链表中第 index 个节点的值。如果索引无效&#xff0c;则返回-1。addAtHead(val)&#x…

Day37代码随想录(1刷) 动态规划

509. 斐波那契数 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;其中 n …