当前位置: 首页 > news >正文

代码随想录刷题Day29

逆波兰表达式求值

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

借助栈的结构,可以求解出原始表达式是: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.lryc.cn/news/618593.html

相关文章:

  • 基于51单片机220V交流电流检测系统过流阈值报警设计
  • 通信接口与通信约规
  • 【牛客刷题】REAL806 放它一马:怪物经验值最大化策略详解
  • 【基于DesignStart的M3 SoC】
  • 终端安全检测和防御技术
  • UGUI源码剖析(6):遮罩的“魔法”与“算法”——从C#到Shader,彻底揭示Mask与RectMask2D的原理
  • OpenHarmony编译与烧录
  • HTTPS服务
  • MCU外设初始化:为什么参数配置必须优先于使能
  • Ceph的FileStore存储引擎详解
  • 如何提升需求分析能力
  • NLP—词向量转换评论学习项目分析
  • 【SpringBoot】05 容器功能 - SpringBoot底层注解的应用与实战 - @Configuration + @Bean
  • IIS Express中可以同时加载并使用.net4.0和.NET 2.0的 DLL
  • 面试八股之从jvm层面深入解析Java中的synchronized关键字
  • 使用pyqt5实现可勾选的测试用例界面
  • MM DEMO-2025 | 北航新融合LLM与多模态交互的无人机导航系统!AirStar,智能空中助手等你来体验
  • 前端/在vscode中创建Vue3项目
  • NoC设计中Router Table的作用
  • Day05 店铺营业状态设置 Redis
  • 【C++】迭代器失效问题
  • THCV215一种高速视频数据收发器,采用低电压差分信号(LVDS)技术支持高速串行数据传输,支持1080p/60Hz高分辨率传输
  • 软考备考(三)
  • 2-1〔O҉S҉C҉P҉ ◈ 研记〕❘ 漏洞扫描▸理论基础与NSE脚本
  • 26 届秋招建议指南
  • Git与CI/CD相关知识点总结
  • [激光原理与应用-251]:理论 - 几何光学 - 长焦与短焦的比较
  • k8s-scheduler 解析
  • 【Java项目与数据库、Maven的关系详解】
  • 正向传播与反向传播(神经网络思维的逻辑回归)