表达式计算类题目

发布时间:2026/8/19 8:37:53

表达式计算类题目
参考资料leetcode.doocs.org/lc150. 逆波兰表达式求值给你一个字符串数组tokens表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。注意有效的算符为、-、*和/。每个操作数运算对象都可以是一个整数或者另一个表达式。两个整数之间的除法总是向零截断。表达式中不含除零运算。输入是一个根据逆波兰表示法表示的算术表达式。答案及所有中间计算结果可以用32 位整数表示。示例 1输入tokens [2,1,,3,*] 输出9 解释该算式转化为常见的中缀算术表达式为((2 1) * 3) 9示例 2输入tokens [4,13,5,/,] 输出6 解释该算式转化为常见的中缀算术表达式为(4 (13 / 5)) 6示例 3输入tokens [10,6,9,3,,-11,*,/,*,17,,5,] 输出22 解释该算式转化为常见的中缀算术表达式为 ((10 * (6 / ((9 3) * -11))) 17) 5 ((10 * (6 / (12 * -11))) 17) 5 ((10 * (6 / -132)) 17) 5 ((10 * 0) 17) 5 (0 17) 5 17 5 22提示1 tokens.length 104tokens[i]是一个算符、-、*或/或是在范围[-200, 200]内的一个整数逆波兰表达式逆波兰表达式是一种后缀表达式所谓后缀就是指算符写在后面。平常使用的算式则是一种中缀表达式如( 1 2 ) * ( 3 4 )。该算式的逆波兰表达式写法为( ( 1 2 ) ( 3 4 ) * )。逆波兰表达式主要有以下两个优点去掉括号后表达式无歧义上式即便写成1 2 3 4 *也可以依据次序计算出正确结果。适合用栈操作运算遇到数字则入栈遇到算符则取出栈顶两个数字进行计算并将结果压入栈中经典单栈做法intevalRPN(vectorstringtokens){stackintnums;for(conststrings:tokens){if(s||s-||s*||s/){intbnums.top();nums.pop();intanums.top();nums.pop();if(s)nums.push(ab);elseif(s-)nums.push(a-b);elseif(s*)nums.push(a*b);elseif(s/)nums.push(a/b);}else{nums.push(stoi(s));}}returnnums.top();}227. 基本计算器 II给你一个字符串表达式s请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。你可以假设给定的表达式总是有效的。所有中间结果将在[-2^31, 2^31 - 1]的范围内。**注意**不允许使用任何将字符串作为数学表达式计算的内置函数比如eval()。示例 1输入s 32*2 输出7示例 2输入s 3/2 输出1示例 3输入s 35 / 2 输出5提示1 s.length 3 * 105s由整数和算符[, -, *, /]组成中间由一些空格隔开s表示一个有效表达式表达式中的所有整数都是非负整数且在范围[0, 231 - 1]内题目数据保证答案是一个32-bit 整数这是一个最经典的表达式计算题目不包含负数不包括括号双栈做法classSolution{public:intcalculate(string s){stackintnums;stackcharops;unordered_mapchar,intpri{{,0},{-,0},{*,1},{/,1},};functionvoid()calc[]{intbnums.top();nums.pop();intanums.top();nums.pop();intopops.top();ops.pop();switch(op){case:nums.push(ab);break;case-:nums.push(a-b);break;case*:nums.push(a*b);break;case/:nums.push(a/b);break;}};for(inti0,ns.size();in;i){if(s[i] )continue;if(isdigit(s[i])){intji;intnum0;// 注意这里数字可能越界需要加上 jn 判断while(jnisdigit(s[j])){numnum*10(s[j]-0);}nums.push(num);ij-1;}else{// 注意需要排除栈顶元素为 ( 的情况while(ops.size()ops.top()!(pri[ops.top()]pri[s[i]]){calc();}ops.push(s[i]);}}while(ops.size()){calc();}returnnums.top();}};772. 基本计算器Ⅲ实现一个基本的计算器来计算简单的表达式字符串。表达式字符串只包含非负整数算符、-、*、/左括号(和右括号)。整数除法需要向下截断。你可以假定给定的表达式总是有效的。所有的中间结果的范围均满足[-2^31, 2^31 - 1]。**注意**你不能使用任何将字符串作为表达式求值的内置函数比如eval()。示例 1输入s 11 输出2示例 2输入s 6-4/2 输出4示例 3输入s 2*(55*2)/3(6/28) 输出21提示1 s 104s由整数、、-、*、/、(和)组成s是一个有效的表达式和 227 题的区别 在于这里可能包含括号但处理逻辑并不复杂。双栈做法classSolution{public:intcalculate(string s){stackintnums;stackcharops;unordered_mapchar,intpri{{,0},{-,0},{*,1},{/,1},};functionvoid()calc[]{intbnums.top();nums.pop();intanums.top();nums.pop();intopops.top();ops.pop();switch(op){case:nums.push(ab);break;case-:nums.push(a-b);break;case*:nums.push(a*b);break;case/:nums.push(a/b);break;}};for(inti0,ns.size();in;i){if(s[i] )continue;if(isdigit(s[i])){intji;intnum0;// 注意这里数字可能越界需要加上 jn 判断while(jnisdigit(s[j])){numnum*10(s[j]-0);}nums.push(num);ij-1;}else{if(s[i]()ops.push(s[i]);elseif(s[i])){while(ops.top()!(){calc();}ops.pop();}else{// 注意需要排除栈顶元素为 ( 的情况while(ops.size()ops.top()!(pri[ops.top()]pri[s[i]]){calc();}ops.push(s[i]);}}}while(ops.size()){calc();}returnnums.top();}};224. 基本计算器给你一个字符串表达式s请你实现一个基本计算器来计算并返回它的值。注意:不允许使用任何将字符串作为数学表达式计算的内置函数比如eval()。示例 1输入s 1 1 输出2示例 2输入s 2-1 2 输出3示例 3输入s (1(452)-3)(68) 输出23提示1 s.length 3 * 105s由数字、、-、(、)、和 组成s表示一个有效的表达式不能用作一元运算(例如1和(2 3)无效)-可以用作一元运算(即-1和-(2 3)是有效的)输入中不存在两个连续的操作符每个数字和运行的计算将适合于一个有符号的 32位 整数224 题对四则运算和括号的处理和 772/227 没啥区别虽然 224 不不需要支持乘除法但 224 中提到负数可能作为一元运算符这就要求我们对符号作为一算符的情况特殊处理因为我们的双栈数字栈和符号栈默认运算符都是二元的左右括号特殊处理。具体的对负数是一元运算符的情况我们需要将其改造为二元运算符的形式即对于-x将其改造为0 - x也就是在负号前面补一个 0 充当左运算符。双栈做法基于 772 的基础改进// 需要使用 long long不然对于 -2147483648 这个测试用例会溢出// 因为我们计算时是会把 -2147483648 表达为 0-2147483648// 具体执行代码就出现了 2147483648典型的 int 场景下负数转正数溢出问题classSolution{public:intcalculate(string s){stacklonglongnums;stackcharops;unordered_mapchar,intpri{{,0},{-,0},{*,1},{/,1},};functionvoid()calc[]{longlongbnums.top();nums.pop();longlonganums.top();nums.pop();charopops.top();ops.pop();switch(op){case:nums.push(ab);break;case-:nums.push(a-b);break;case*:nums.push(a*b);break;case/:nums.push(a/b);break;}};for(inti0,ns.size();in;i){if(s[i] )continue;// 补 0 逻辑if(s[i]-){intprevi-1;while(prev0s[prev] )prev--;// 此时负号是一元运算符if(prev0||s[prev]()nums.push(0);}if(isdigit(s[i])){intji;longlongnum0;// 注意这里数字可能越界需要加上 jn 判断while(jnisdigit(s[j])){numnum*10(s[j]-0);}nums.push(num);ij-1;}else{if(s[i]()ops.push(s[i]);elseif(s[i])){while(ops.top()!(){calc();}ops.pop();}else{// 注意需要排除栈顶元素为 ( 的情况while(ops.size()ops.top()!(pri[ops.top()]pri[s[i]]){calc();}ops.push(s[i]);}}}while(ops.size()){calc();}returnnums.top();}};

相关新闻

代码随想录算法训练营第十天|150.逆波兰表达式求值,239.滑动窗口最大值,347.前K个高频元素

代码随想录算法训练营第十天|150.逆波兰表达式求值,239.滑动窗口最大值,347.前K个高频元素

2026/8/19 8:37:53

150.逆波兰表达式求值 看到题目的第一想法 后序遍历嘛,这很快就让我想到上一题也是找到特定的元素然后对栈进弹出,只不过这次是弹出两个,组装一下再加进去 看完代码随想录的第一想法 跟我想的也差不多,确实是跟上一题差不多&a…

3步解锁微信平板模式,同一账号手机平板同时登录:WeChatPad 实战指南

3步解锁微信平板模式,同一账号手机平板同时登录:WeChatPad 实战指南

2026/8/19 8:27:53

3步解锁微信平板模式,同一账号手机平板同时登录:WeChatPad 实战指南 【免费下载链接】WeChatPad 强制使用微信平板模式 项目地址: https://gitcode.com/gh_mirrors/we/WeChatPad 深夜加班回家,手机只剩 8% 电量,你窝进沙发…

我用三年时间沉淀的后端技术栈学习路线图

我用三年时间沉淀的后端技术栈学习路线图

2026/8/19 8:27:53

第一阶段,我先声明一个反直觉的事实:后端学习路线图不是地图,而是你自己踩出来的脚印合集。网上流传的各种“三个月精通后端”“一份路线图从入门到架构师”,大概率是培训机构用来制造焦虑的鱼饵。我花了三年时间,从写…

凌晨一点的刷本噩梦,一页 Python 脚本就能终结:认识 FGO-Automata

凌晨一点的刷本噩梦,一页 Python 脚本就能终结:认识 FGO-Automata

2026/8/19 9:37:56

凌晨一点的刷本噩梦,一页 Python 脚本就能终结:认识 FGO-Automata 【免费下载链接】FGO-Automata 一个FGO脚本和API フェイトグランドオーダー自動化 项目地址: https://gitcode.com/gh_mirrors/fg/FGO-Automata 凌晨一点半,屏幕里的…

iFakeLocation 使用教程:不越狱给 iPhone 换定位,3 分钟上手的完整避坑清单

iFakeLocation 使用教程:不越狱给 iPhone 换定位,3 分钟上手的完整避坑清单

2026/8/19 9:37:56

iFakeLocation 使用教程:不越狱给 iPhone 换定位,3 分钟上手的完整避坑清单 【免费下载链接】iFakeLocation Simulate locations on iOS devices on Windows, Mac and Ubuntu. 项目地址: https://gitcode.com/gh_mirrors/if/iFakeLocation 测试用…

基于Yosys与APIO的开源FPGA工具链实战:从环境搭建到项目优化

基于Yosys与APIO的开源FPGA工具链实战:从环境搭建到项目优化

2026/8/19 9:37:56

1. 项目概述:为什么开源FPGA工具链值得你投入时间如果你接触过FPGA开发,大概率对Vivado、Quartus这些名字不陌生。它们功能强大,但同时也意味着高昂的授权费用、动辄几十GB的安装体积,以及相对封闭的生态系统。对于学习者、开源硬…

Sunshine 游戏串流应用管理快速上手指南:手把手配置你的第一个可串流游戏

Sunshine 游戏串流应用管理快速上手指南:手把手配置你的第一个可串流游戏

2026/8/19 9:37:56

Sunshine 游戏串流应用管理快速上手指南:手把手配置你的第一个可串流游戏 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 刚把 Sunshine 装好、兴冲冲地在 Moonlight 里…

基于Arduino与树莓派的风力发电机智能监控系统DIY指南

基于Arduino与树莓派的风力发电机智能监控系统DIY指南

2026/8/19 9:37:56

1. 项目缘起:为什么需要自己动手监控风力发电机?如果你在自家后院、农场或者一个偏远的实验场地架设了一台小型风力发电机,你可能会遇到一个很实际的问题:我怎么知道它现在转得怎么样?它今天发了多少电?叶片…

VS Code配CodeWhisperer踩坑实录:从报错到流畅补全的5个关键设置

VS Code配CodeWhisperer踩坑实录:从报错到流畅补全的5个关键设置

2026/8/19 9:27:55

VS Code配CodeWhisperer踩坑实录:从报错到流畅补全的5个关键设置 AWS深度学习开发实战:从CodeWhisperer集成到生产环境部署的完整指南 上周五准备发版前,团队突然要求所有AI辅助代码必须通过AWS认证。这个看似简单的合规要求,让我在深度学习基础项目上卡了整整两天。本文将详细…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/19 3:36:59

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/19 9:17:18

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/19 8:02:16

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

SQL 调优 [ 2 ]

SQL 调优 [ 2 ]

2026/8/19 0:07:32

type列详解EXPLAIN输出的type列描述了表是如何连接的,性能从最好到最差的排序如下:systemconsteq_refreffulltextref_or_nullindex_mergeunique_subqueryindex_subqueryrangeindexALL接下来我们对 type列 做详细讲解。我们都知道,想要评估一条…

正式评优怎么选投票工具?人人微投票审计级防刷能力实测

正式评优怎么选投票工具?人人微投票审计级防刷能力实测

2026/8/19 0:07:32

在线上投票工具遍地开花的今天,选择一个合适的平台,本质上是在做一道关于场景与需求的匹配题。人人微投票是一个很典型的案例——它的产品逻辑、技术架构和商业模式,都围绕着“正式评选”这个细分场景深度扎根,也因此形成了自己鲜…

15 天 3 连发:DeepSeek 的「机枪」节奏,到底在下什么棋?

15 天 3 连发:DeepSeek 的「机枪」节奏,到底在下什么棋?

2026/8/19 0:07:32

15 天 3 连发:DeepSeek 的「机枪」节奏,到底在下什么棋?回看 2026 年 8 月这半个月,DeepSeek 的动作密度堪称疯狂:月初端出便宜快速的 V4-Flash,8 月 13 日同一天甩出 V4-Pro 正式版 开源 Harness 框架&am…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/17 12:00:53

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/15 10:10:27

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/18 12:20:24

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…