逆波兰表达式求值

这是一道经典地使用栈来解决后缀表达式求解的题目。使用栈来求解后缀表达式的流程如下:

借助栈的结构,可以求解出原始表达式是:9 +(-3 - 1)* 3 + 10 / 2 = 2,在遵照规则过程中,还有些细节要注意:

  1.   数字字符串如何转化为整数格式?尤其是负数。
  2. 注意遇到计算符号时,从栈中出栈用于计算的两个数,对于减法和除法是有序的,被减数/被除数应该是按照原始的入栈顺序来确定,也就是先入栈的是被减数/被除数,所以先出栈的是减数/除数。

代码如下,因为考虑到耗时上的加速,所以直接使用字符数组来表示栈,栈顶通过数组长度这个变量来维护:

class Solution {
public:int getInt(string s){//如果字符串是计算符,返回201int num = 201;if(s.length()==1&&(s[0]=='-'||s[0]=='+'||s[0]=='*'||s[0]=='/')){num = 201;}//字符串是数字,则转化为int值else{if(s[0]=='-'){//这是一个负数num = 0;for(int i = 1;i<s.length();i++){num = 10 * num + s[i]-'0';}num = -num;}else{//非负数num = 0;for(int i=0;i<s.length();i++){num  = num *10 +s[i]-'0';}}}return num;}int evalRPN(vector<string>& tokens) {int num_stack[10001];int stack_cnt = 0;for(int i= 0;i<tokens.size();i++){if(getInt(tokens[i])==201){//遇到计算符,就两个数字出栈,计算结果,并把结果放回到栈中int num2 = num_stack[stack_cnt-1];stack_cnt--;int num1 = num_stack[stack_cnt-1];stack_cnt--;int res = 0;if(tokens[i]=="+"){res = num1+num2;}else if(tokens[i]=="-"){res = num1 - num2;}else if(tokens[i]=="*"){res = num1 * num2;}else if(tokens[i]=="/"){res = num1 / num2;}num_stack[stack_cnt++]=res;}else{//遇到数字就入栈num_stack[stack_cnt++]=getInt(tokens[i]);}}return num_stack[stack_cnt-1];}
};

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

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

相关文章

crew AI笔记[3] - 设计理念

二八法则-task设计最重要80%精力设计tasks&#xff0c;20%精力定义agents花最多的实践定义任务说明清晰定义输入输出增加示例和预期结果来约束输出剩下的精力完善agent的role、goal、backstory1、Agent设计三要素role-goal-backstory框架Role - 职能定义足够具体【作家 &#x…

【李宏毅-2024】第六讲 大语言模型的训练过程1——预训练(Pre-training)

目录概述1. 预训练&#xff08;Pre-training&#xff09;2. 微调&#xff08;Fine-tuning&#xff0c;又称 SFT&#xff0c;Supervised Fine-Tuning&#xff09;3. 对齐&#xff08;Alignment&#xff0c;又称 RLHF 或 DPO 等&#xff09;4 三阶段对比6 第一阶段——自我学习&a…

基于LLVM的memcpy静态分析工具:设计思路与原理解析(C/C++代码实现)

在程序开发中&#xff0c;内存复制操作&#xff08;如memcpy&#xff09;往往是性能瓶颈的关键来源——尤其是大型内存块的复制&#xff0c;可能导致缓存失效、带宽占用过高等问题。为了精准定位这些潜在的性能热点&#xff0c;开发者需要一种能自动识别程序中memcpy调用&#…

使用 Conda 安装 xinference[all](详细版)

1. 安装 Miniconda&#xff08;若未安装&#xff09; Miniconda 是 Anaconda 的轻量版&#xff0c;仅包含 Conda 和 Python&#xff0c;适合服务器环境。 下载并安装 Miniconda 下载地址&#xff1a;Index of /miniconda &#xff0c;可以自行选择适合的版本 # 下载最新版 …

服务器登上去,显示 failed to send WATCHDOG 重启有效吗?

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 当你登录服务器时&#xff0c;看到类似以下提示&#xff1a; failed to send WATCHDOG: Resource temporarily unavailable这通常和系统的 systemd 服务有关&#xff0c;尤其是那些启用了 watchdog&#xff08;看门…

重学React(五):脱围机制一

背景&#xff1a; 之前将React的基础知识以及状态管理相关的知识都过了一遍&#xff0c;查漏补缺的同时对React也有了一些新鲜的认知&#xff0c;接下来这个模块的名字很有意思&#xff1a;脱围机制&#xff0c;内容也比之前的部分难理解一些。但整体看下来&#xff0c;理解之后…

去除Edge微软浏览器与Chrome谷歌浏览器顶部出现“此版本的Windows不再支持升级Windows 10”的烦人提示

前言 在 Windows 7 中&#xff0c;安装 Microsoft Edge 109 版本后&#xff0c;启动浏览器时会弹出提示&#xff1a; 此版本的 Windows 不再支持 Microsoft Edge。升级到 Windows 10 或更高版本&#xff0c;以获取常规功能和安全更新。 同样地&#xff0c;安装 Google Chrome 1…

PWM、脉冲

要求&#xff1a;一、PWM输出PWM波生成原理在此处使用TIM2生成PWM&#xff0c;PA1输出PWM波。CNT小于CCR时&#xff0c;输出高电平&#xff1b;CNT大于CCR时&#xff0c;输出低电平。 输入捕获测量频率的原理输入捕获的捕获意思是它在PWM波上升沿或者下降沿的时候&#xff0c;会…

文件IO(1)

.文件IO1.概念标准IO是有缓存的IO&#xff0c;文件IO没有缓存&#xff0c;适合于通信、硬件设备操作标准IO是库函数&#xff0c;文件IO是系统调用2.系统调用与库函数系统调用&#xff1a;是Linux内核中的代码&#xff0c;只能在Linux系统中使用库函数&#xff1a;是对系统调用的…

【AI】Pycharm中要注意Python程序文件的位置

博主试着在本地电脑用Pycharm环境运行随便一个机器学习然后做图像识别的模型&#xff0c;Python的程序一直报博主学习图片的路径不正确&#xff0c;博主查了好几遍&#xff0c;也没找出问题&#xff0c;后来借助Deepseek才知道&#xff0c;Python主程序的位置一定要在Project下…

TDengine 可观测性最佳实践

TDengine 介绍 TDengine 是一款开源、高性能、云原生的时序数据库&#xff0c;专为物联网、车联网、工业互联网、金融、IT 运维等场景优化设计。它不仅提供了高效的数据存储和查询功能&#xff0c;还带有内建的缓存、流式计算、数据订阅等系统功能&#xff0c;能大幅减少系统设…

Jenkins 搭建鸿蒙打包

1、创建流水线工程 选择 Freestyle project 2、配置模板仓库、凭证 配置仓库地址 创建凭证&#xff0c;凭证选择账号-密码&#xff08;能够访问该仓库的个人或管理员 Gitlab 账密&#xff09; 到这里执行构建&#xff0c;便可以克隆仓库到工作目录 3、安装插件 3.1 Rebuild…

【SpringBoot】02 基础入门-什么是Spring Boot?:Spring与SpringBoot

文章目录1、Spring能做什么1.1、Spring的能力1.2、Spring的生态1.3、Spring5重大升级1.3.1、响应式编程1.3.2、内部源码设计2、为什么用SpringBoot2.1、SpringBoot优点2.2、SpringBoot缺点3、时代背景3.2、分布式分布式的困难分布式的解决3.3、云原生上云的困难4、如何学习Spri…

FFmpeg 编译安装和静态安装

FFmpeg 编译安装和静态安装 简介 FFmpeg 是一个领先的多媒体框架&#xff0c;能够解码、编码、转码、复用、解复用、流化、过滤和播放几乎所有人类和机器创建的格式。本指南将详细介绍如何在 CentOS 8.5.2111 系统上从源代码编译并安装 FFmpeg 6.1.1 版本。从源代码编译安装可…

人大BABEC地平线高效率具身导航!Aux-Think:探索视觉语言导航中数据高效的推理策略

作者&#xff1a; Shuo Wang1,3^{1,3}1,3, Yongcai Wang1^{1}1, Wanting Li1^{1}1 , Xudong Cai1^{1}1, Yucheng Wang3^{3}3, Maiyue Chen3^{3}3, Kaihui Wang3^{3}3, Zhizhong Su3^{3}3, Deying Li1^{1}1, Zhaoxin Fan2^{2}2单位&#xff1a;1^{1}1中国人民大学&#xff0c;2^…

01. maven的下载与配置

1.maven的下载与初步配置a.下载并配置仓库地址下载maven压缩包&#xff0c;并解压&#xff0c;解压后应有如下几个文件点击conf&#xff0c;打开settings.xml&#xff08;我用的VScode打开的&#xff09;&#xff0c;我们需要声明一下内部仓库的地址&#xff0c;以及私服的一些…

1701. 请输出所有的3位对称数

问题描述请输出所有的 33 位对称数&#xff0c;对称数指的是一个整数 nn 正过来和倒过来是一样的&#xff0c;比如&#xff1a;101、121、282…101、121、282…请从小到大输出符合条件的3位对称数&#xff0c;每行 11 个。输入无。输出从小到大按题意输出符合条件的数&#xff…

C++算法·排序

排序的定义 这个不用说吧 就是根据某个条件对一个数列进行有序的操作 例如要求从小到大排序、从大到小排序等等 排序的分类 比较排序(Comparison(Comparison(Comparison Sorts)Sorts)Sorts) 特点&#xff1a;通过元素间的比较决定顺序 时间复杂度下限&#xff1a;O(nO(nO(n…

微服务项目中的注册中心——Nacos配置

从零开始&#xff1a;Nacos服务注册与配置中心实战教程 Nacos&#xff08;Dynamic Naming and Configuration Service&#xff09;是阿里巴巴开源的服务发现、配置管理工具&#xff0c;集注册中心与配置中心于一体&#xff0c;广泛应用于微服务架构。本文将从环境搭建到实战配…

日期格式化成英文月,必須指定語言環境

如果不指定Locale.ENGLISH 在有些JDK下 輸出6月 INV USD 314,791.77,DUE 25-07 [PAID USD 503,389.56 ON 2025-07-16]Mar INV USD 52,042.00,DUE 25-07 [PAID USD 52,042.00 ON 2025-08-11]所以必…