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

算法训练营第二十天|150. 逆波兰表达式求值

第一部分:题目要求

给你一个字符串数组tokens,表示一个根据 逆波兰表示法 表示的算术表达式。

请你计算该表达式。返回一个表示表达式值的整数。

注意:

  • 有效的算符为'+''-''*''/'
  • 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
  • 两个整数之间的除法总是向零截断
  • 表达式中不含除零运算。
  • 输入是一个根据逆波兰表示法表示的算术表达式。
  • 答案及所有中间计算结果可以用32 位整数表示。

本题不难,但第一次做的话,会很难想到,所以先看视频,了解思路再去做题

题目链接:https://leetcode.cn/problems/evaluate-reverse-polish-notation/

视频讲解:https://www.bilibili.com/video/BV1kd4y1o7on

第二部分:解题过程

class Solution { public: int evalRPN(vector<string>& tokens) { stack<int>st; for (int i = 0; i < tokens.size(); i++){ string cur = tokens[i]; if (cur == "+" || cur == "-" || cur == "*" || cur == "/"){ int num1 = st.top(); st.pop(); int num2 = st.top(); st.pop(); if (cur == "+") st.push(num2 + num1); else if (cur == "-") st.push(num2 - num1); else if (cur == "*") st.push(num2 * num1); else if (cur == "/") st.push(num2 / num1); } else { st.push(stoi(cur)); } } int result = st.top(); st.pop(); return result; } };

  • 初始化栈:用于存储遍历过程中的数字,以及中间计算结果。
  • 线性遍历表达式
    • 遇到数字:直接转换为整数压入栈,等待后续运算调用;
    • 遇到运算符:触发一次运算,从栈顶连续弹出 2 个操作数(先弹出的是右操作数,后弹出的是左操作数),按运算符完成计算后,将结果重新压入栈。
  • 提取最终结果:遍历完成后,栈中只会剩余一个元素,就是整个表达式的最终计算结果。

第三部分:易错点

  • 操作数计算顺序完全搞反:栈是后进先出,先弹出的num1右操作数,后弹出的num2左操作数,减法、除法必须严格按照num2 运算符 num1计算,若写反会直接得到错误结果。

  • 字符串与字符的判断错误:输入的tokens元素是string类型,判断运算符必须用双引号"",不能用单引号'

第四部分:解题感悟

这类基础算法题,最好的验证方式是手动用示例走一遍流程,尤其是栈的进出顺序,能快速发现逻辑漏洞,避免写完代码后 debug 找不到问题根源。

逆波兰表达式的设计思想非常巧妙:它把人类熟悉的、需要理解优先级的中缀表达式,转换成了计算机可以无脑线性执行的后缀表达式,这也是编译原理中表达式计算的核心底层逻辑,理解这个题

http://www.jsqmd.com/news/722260/

相关文章:

  • 优化.NET依赖注入中的设置缓存
  • 九部门联合布局:开启3.5万亿的“超级物联网”计划
  • 别再死记硬背了!一张图看懂AXI4握手时序,附赠读/写通道依赖关系速查表
  • 物联网电主轴智能运维系统【附代码】
  • Moneta Markets亿汇:美元走强日元宽幅震荡
  • 医疗电子PCB设计:挑战、标准与关键技术解析
  • LwIP(轻量级IP协议栈)概述
  • 机器学习中的特征工程与TensorFlow模型
  • 增程式PHEV能量管理仿真——从规则策略到优化算法
  • 卡梅德生物技术快报|杂交瘤测序实战:SP2/0 假轻链酶切去除与序列验证代码
  • 2026年最新英语作文批改手机APP 帮学生快速提分的实用神器
  • 别再全网乱搜了!RAS官方模板下载与IROS/ICRA投稿避坑全指南(附会议排名)
  • 2026年Q2广州白云区搬家公司实测排行一览 - 优质品牌商家
  • 【本地部署】2026年Hermes Agent/OpenClaw7分钟超简易搭建流程
  • 时间戳处理:从Pandas到BigQuery的无缝转换
  • PHP应用容器化迁移至统信UOS与openEuler(国产操作系统适配终极手册)
  • Horos:如何免费获得专业级macOS医疗影像处理能力
  • 《Windows Internals》读书笔记 10.3.7:UBPM 的任务触发与状态管理
  • 别再只会用runOnUiThread了!Android子线程更新UI的5种正确姿势(附Handler/LiveData对比)
  • 指纹锁核心技术拆解与场景适配全推荐 - 优质品牌商家
  • wireshark学习-ARP
  • CANoe Analysis功能区保姆级教程:从Trace窗口到Graphics,手把手教你高效分析总线数据
  • “给我发个元红包“:一条群消息背后的 AI 安全危机
  • 深入探讨Rust中指针的安全性
  • 魔兽争霸3终极兼容性修复指南:5分钟解决所有现代系统运行问题
  • 从零到部署:用Uvicorn和Docker打包你的FastAPI应用(附Nginx配置)
  • 语音AI技术解析:从核心技术到产业落地
  • 如何3分钟安装免费浏览器Markdown阅读器:专业文档渲染终极指南
  • UI学习:通知传值
  • SAP EWM收货实操:从ERP采购单到仓库上架,手把手配置传输队列与避坑