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

LeetCode 150. Evaluate Reverse Polish Notation 题解

LeetCode 150. Evaluate Reverse Polish Notation 题解

题目描述

根据 逆波兰表示法,求表达式的值。

有效的运算符包括+,-,*,/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。

说明:

  • 整数除法只保留整数部分。
  • 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为零的情况。

示例 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

解题思路

方法:栈

思路

  • 使用栈来存储操作数
  • 遍历表达式中的每个 token:
    • 如果是操作数,将其转换为整数并压入栈中
    • 如果是运算符,从栈中弹出两个操作数,执行相应的运算,将结果压入栈中
  • 遍历结束后,栈中只剩下一个元素,即为表达式的结果

复杂度分析

  • 时间复杂度:O(n),其中 n 是表达式的长度。只需要遍历表达式一次。
  • 空间复杂度:O(n),最坏情况下,栈需要存储所有操作数。

代码实现

方法:栈

class Solution: def evalRPN(self, tokens: List[str]) -> int: # 初始化栈 stack = [] # 遍历表达式中的每个 token for token in tokens: # 如果是运算符 if token in ['+', '-', '*', '/']: # 弹出两个操作数 b = stack.pop() a = stack.pop() # 执行相应的运算 if token == '+': stack.append(a + b) elif token == '-': stack.append(a - b) elif token == '*': stack.append(a * b) elif token == '/': # 整数除法只保留整数部分 stack.append(int(a / b)) # 如果是操作数,将其转换为整数并压入栈中 else: stack.append(int(token)) # 栈中只剩下一个元素,即为表达式的结果 return stack[0]

测试用例

测试用例 1:

输入:tokens = ["2", "1", "+", "3", "*"]
输出:9

测试用例 2:

输入:tokens = ["4", "13", "5", "/", "+"]
输出:6

测试用例 3:

输入:tokens = ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]
输出:22

总结

本题是栈的经典应用问题,主要考察对栈数据结构的理解和使用。通过使用栈,我们可以高效地计算逆波兰表达式的值。

栈的核心思想是:使用栈来存储操作数,当遇到运算符时,从栈中弹出两个操作数,执行相应的运算,将结果压入栈中。

这种方法不仅适用于逆波兰表达式求值问题,还可以应用于许多其他需要栈来处理的表达式计算问题。掌握栈的使用,对于解决这类问题非常重要。

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

相关文章:

  • 终极Figma设计文件与JSON双向转换完全指南:释放设计数据的无限可能
  • 从手机到基站:拆解TCXO/VCXO在5G和物联网设备里的‘心跳’作用
  • Performance-Fish:实现400%游戏帧率提升的三级缓存架构与并行计算优化
  • 基于深度学习的【犬类识别】系统~Python+人工智能+算法模型+图像识别
  • CST实战指南:三单元八木天线的高效设计与性能优化
  • 推三返一模式的商业价值验证解析
  • 告别臃肿!Dell G15散热控制神器tcc-g15:轻量级开源替代方案深度解析
  • min-max 容斥
  • JavaScript中Redux-Thunk处理异步Action的任务流
  • 常用算法里的细节
  • 一文搞懂:开发环境配置进化史——从Maven到Nacos再到Docker
  • 你的微信聊天记录值得永久珍藏吗?WeChatMsg开源工具实现数据自主管理
  • 精准管控付款!融智天合同管理系统应付统计功能实测 - 业财科技
  • Python依赖地狱实战:如何在不降级gradio-client的情况下,修复Gradio的JSON Schema解析Bug
  • 如何用Python在5分钟内批量获取B站视频的精确数据?
  • RT-Thread BSP制作避坑指南:从Kconfig配置到SCons脚本的完整实战(STM32平台)
  • Pixel Language Portal 物联网(IoT)应用:为嵌入式设备生成轻量级通信协议解析代码
  • 为什么市面AI视频工具,都不适合做课程?
  • 文化与科技共生,让超元力XR剧场在沉浸中焕发新生
  • Next.js 14中的数据传递:服务器与客户端的完美协作
  • 从‘運’字说起:GBK编码、PHP转义函数与MySQL连接层的安全三角关系
  • **边缘Ai新范式:基于Python的轻量级模型部署实战与优化策略**在人工智能飞
  • #官方认证|2026年国内六大正规水分仪 / 面密度仪公司排名,广东佛山等地,巢目科技技术领先实力强 - 十大品牌榜
  • 腾讯地图 智能硬件定位
  • 终极指南:用TrafficMonitor插件将Windows任务栏变成全能监控中心
  • 2025平航杯(持续更新)
  • 电商数据采集不稳定?试试企业级授权 API 通道,高并发不风控
  • XUnity.AutoTranslator终极指南:3种方法让Unity游戏实时翻译无障碍
  • CDH 6.3.2 集群部署实战:从零到一构建企业级大数据平台
  • 三国地理与战略推演:从地图视角解析关键战役的胜负手