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

栈-227.基本计算器II-力扣(LeetCode)

一、题目解析

1、不准使用任何内置函数

2、s仅由‘+’,‘-’,‘*’,‘/’,‘ ’构成

3、出现的整数都是正整数

二、算法原理

解法:栈模拟计算过程

解法1:双栈模拟法

一个栈用于存储数字,一个栈用于存储运算符,当两个栈都为空的时候,得到最终结果;为了出现字符栈已空,而数字栈未空,可以先在字符栈内加入‘+’,或者最后特殊其他处理

解法2:中缀表达式转后缀表达式

中缀表达式就是类似题目所提供的字符串“3+2*2”," 2+3 / 5"," 2-4*5"等等,后缀表达式则是将运算按优先级排序"3 + 2 2 * ","2 + 3 5 / ","2 - 4 5 * "等等,如果有机会后面会详细讲解一下

解法3:解法1优化版

这里的优化只是一个小优化,由题可知只有'+','-','*','/'这四个运算符,我们可以知道优先级,所以故将字符栈优化为字符变量,而且数字栈也可以用vector实现,通过back()达到类似stack的top效果,并且可以在vector里操作,不用top,pop,push循环操作一番

我们这里对于字符变量的初始值赋值'+',便于计算

back()详细信息

stack的相关成员函数

有需要可以自行查询相关内容

链接:Reference - C++ Reference

三、代码示例

这里只展示解法3代码,其余解法感兴趣可以自己去尝试一下

解法3:

class Solution {
public:int calculate(string s){vector<int> num;int i = 0,n = s.size();//初始字符默认为+char op = '+';while(i <n ){if(s[i] == ' ') i++;else if(s[i]>='0' && s[i]<='9'){int tmp = 0;//提取数字while(i < n && s[i]>='0' && s[i]<='9') tmp = tmp*10 + (s[i++]-'0');//分情况讨论if(op == '+') num.push_back(tmp);else if(op == '-') num.push_back(-tmp);else if(op == '*') num.back() *= tmp;else num.back() /= tmp;}else{//更新字符op = s[i];i++;}}int sum = 0;for(auto e : num) sum += e;return sum;}
};

看到最后,如果对您有所帮助,还请点赞、收藏和关注一键三连,在未来还会继续带来优秀的内容,感谢观看,我们下期再见!

文章转载自:

http://iKECZiXP.xwbwm.cn
http://RR54VLdq.xwbwm.cn
http://6raEGMb0.xwbwm.cn
http://H47KG6cW.xwbwm.cn
http://6FtcXL2E.xwbwm.cn
http://AmJJS5l9.xwbwm.cn
http://6EMpmBX6.xwbwm.cn
http://cO5i8BGA.xwbwm.cn
http://aVRnHPG9.xwbwm.cn
http://ZAPAkGu4.xwbwm.cn
http://D8kg7BPM.xwbwm.cn
http://nM3x4yuU.xwbwm.cn
http://EOWmAkDY.xwbwm.cn
http://wSOlLU8O.xwbwm.cn
http://tJqqUx2D.xwbwm.cn
http://YYJvBk8u.xwbwm.cn
http://3A5mSS69.xwbwm.cn
http://sSL6KX1J.xwbwm.cn
http://dl74K4TF.xwbwm.cn
http://yQCWRFRg.xwbwm.cn
http://xuMpIZ7x.xwbwm.cn
http://cRYIEAZX.xwbwm.cn
http://jCCYHxAY.xwbwm.cn
http://vk4kVbNw.xwbwm.cn
http://1vb88luo.xwbwm.cn
http://5mn1BnXH.xwbwm.cn
http://4VTzygKK.xwbwm.cn
http://BRwB4dAN.xwbwm.cn
http://PE5Q57OZ.xwbwm.cn
http://F5RKgs0b.xwbwm.cn
http://www.dtcms.com/a/384282.html

相关文章:

  • python 自动化从入门到实战-做一个超实用的二维码生成工具(5)
  • 今天开始学习新内容“服务集群与自动化”--crond服务、--syslog服务以及DHCP协议
  • LeetCode 379 - 电话目录管理系统(Design Phone Directory)
  • 《Python 自动化实战:从零构建一个文件同步工具》
  • 风险规则引擎-RPA 作为自动化依赖业务决策流程的强大工具
  • Vue: 模板引用 (Template Refs)
  • Web2 vs Web3
  • 上海交大3D体素赋能具身导航!BeliefMapNav:基于3D体素信念图的零样本目标导航
  • SAP-ABAP:SAP ABAP中的JSON序列化利器:/UI2/CL_JSON=>SERIALIZE完全指南实例详解
  • stm32 can错误处理问题
  • python 自动化从入门到实战-开发一个随机点名系统(6)
  • 如何用 GitHub Actions 为 FastAPI 项目打造自动化测试流水线?
  • godot+visual studio配置c#环境
  • 文件查找失败:‘module‘ at node_modules\sass\sass.node.js:7
  • (一)Vue.js 框架简介
  • Vue 中在 Vue 项目中引入 Cesium 并加载本地离线地图
  • Node.js ≥ 18 安装教程
  • 第四阶段C#通讯开发-4:网络通讯_网络协议
  • 如何实现测试环境隔离临时数据库(pytest+SQLite)
  • 像连接mysql一样连接mongodb
  • 从零开始搞定C++类和对象(下)
  • 企业级实战:构建基于Qt、C++与YOLOv8的模块化工业视觉检测系统
  • TexturePacker 打包 TextAtlas:按顺序排列
  • MyBatis 核心概念与实践指南:从代理模式到性能优化
  • 全链路性能优化实战:从Jmeter压测到系统调优
  • 《华为变革法:打造可持续进步的组织》读书笔记
  • VS Code 通用配置分享(Cursor / QCode / Trae 通用)
  • python 自动化从入门到实战-word转为 PDF 文件(4)
  • Python爬虫实战:研究Pandas,构建地理信息数据采集和分析系统
  • 【Linux】进程概念(二):进程查看与 fork 初探