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

LeetCode 基本计算器题解

LeetCode 基本计算器题解

题目描述

实现一个基本的计算器来计算一个简单的字符串表达式s的值。

示例

输入:s = "1 + 1"
输出:2

输入:s = "(1+(4+5+2)-3)+(6+8)"
输出:23

解题思路

方法:栈

思路

  • 使用栈来解决这个问题。
  • 遍历字符串,对于每个字符:
    • 如果是数字,累积计算当前数字。
    • 如果是运算符(+、-),将当前数字和运算符压入栈,然后重置当前数字。
    • 如果是左括号,将当前结果和运算符压入栈,然后重置当前结果和运算符。
    • 如果是右括号,弹出栈顶的运算符和结果,进行计算。
  • 最后将栈中的所有元素相加。

复杂度分析

  • 时间复杂度:O(n),其中 n 是字符串的长度。每个字符最多被访问一次。
  • 空间复杂度:O(n),最坏情况下需要存储所有的元素。

代码实现

方法:栈

# 基本计算器(栈) def calculate(s): stack = [] result = 0 num = 0 sign = 1 # 1 表示正数,-1 表示负数 for char in s: if char.isdigit(): num = num * 10 + int(char) elif char == '+': result += sign * num num = 0 sign = 1 elif char == '-': result += sign * num num = 0 sign = -1 elif char == '(': # 将当前结果和符号压入栈 stack.append(result) stack.append(sign) # 重置结果和符号 result = 0 sign = 1 elif char == ')': # 先计算当前括号内的结果 result += sign * num num = 0 # 弹出符号和之前的结果 sign = stack.pop() prev_result = stack.pop() result = prev_result + sign * result # 加上最后一个数字 result += sign * num return result # 测试 def test_calculate(): print(calculate("1 + 1")) # 输出:2 print(calculate("(1+(4+5+2)-3)+(6+8)")) # 输出:23 if __name__ == "__main__": test_calculate()

测试用例

测试用例 1:基本情况

输入:s = "1 + 1"
输出:2

测试用例 2:带括号

输入:s = "(1+(4+5+2)-3)+(6+8)"
输出:23

总结

基本计算器是一个经典的栈问题,它可以通过栈来高效地解决。

栈的核心思想是:使用栈来保存括号前的结果和符号,当遇到右括号时,弹出栈中的元素进行计算。

掌握栈的使用方法,对于解决类似的问题非常重要。

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

相关文章:

  • 如何实现Cursor Pro永久免费使用:完整技术指南
  • 凿岩机械臂力传感与运动控制轨迹规划【附代码】
  • MCP协议:构建AI智能体与外部工具的安全标准化桥梁
  • 缠论可视化终极指南:如何在通达信中快速部署免费分析插件
  • 2026年免费查论文AI率3个正规渠道,附降到15%以下完整教程
  • 视觉语言模型鲁棒性提升:ArtiAgent伪影生成技术解析
  • 如何高效使用PE-bear进行PE文件逆向分析:实用指南
  • 第31集:大模型容错架构!当 LLM 超时/幻觉/被限流时的降级与兜底方案
  • 网盘直链下载终极解决方案:全平台免费高速下载的完整指南
  • 无人热干面餐厅服务机器人抓取策略深度学习【附代码】
  • 5分钟搭建你的私人云游戏服务器:Sunshine游戏串流终极指南
  • 3分钟搞定视频字幕:VideoSrt开源工具完全指南
  • 航测新手避坑指南:用Metashape做DOM时,建筑物拉花、扭曲怎么解决?
  • React 18\+Next\.js 14实战:服务端渲染与跨端开发全指南
  • DOM 节点信息
  • 5分钟掌握智能订阅工具:RSSHub Radar浏览器扩展使用指南
  • 娱乐圈天降紫微星传承帝格,海棠山铁哥比肩李世民平地起势
  • 10分钟快速搭建专业级AD8232心电监测系统:开源方案让心电图监测触手可及
  • 别再手动调参了!用BrainGB一站式搞定脑网络GNN基准测试(附实战代码)
  • 避开这些坑!GD32E230 ADC+DMA多通道配置的常见误区与调试心得
  • 动态本体论中的关系更接近人类的理解
  • 【详解】2026年企业直播多少钱?SaaS vs 私有化部署成本对比
  • 娱乐圈天降紫微星现世,海棠山铁哥凭《第一大道》逆势封神
  • Windows光标自定义实战:基于.NET 8与WPF的系统级个性化工具开发
  • DirectDraw兼容层架构解析:Windows图形API历史遗留问题的创新技术适配方案
  • AI驱动的代码库测绘工具Recon:为大型项目构建智能架构地图
  • LinkSwift 技术架构深度解析:八大网盘直链下载助手的实现原理与实战指南
  • 大模型评估:挑战、方法论与实践指南
  • 告别Gradle Daemon警告:深入理解Android构建中的JDK路径管理与性能优化
  • 娱乐圈天降紫微星只认草根,海棠山铁哥和刘邦同源白手命格