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

【算法刷题日记】LeetCode 227 基本计算器 II|栈处理运算优先级 C 语言

刷题日期:2026.5.3

题目:227. 基本计算器 II难度:中等语言:C 语言

优秀题解:https://leetcode.cn/problems/basic-calculator-ii/solutions/91271/chai-jie-fu-za-wen-ti-shi-xian-yi-ge-wan-zheng-ji-/


一、看到题目的第一想法

题目要求计算带+ - * /的表达式,还有空格,必须处理运算优先级。第一反应:

  1. 乘除优先级高,遇到立刻算
  2. 加减先入栈,最后统一加
  3. 用栈完美解决,时间 O (n),最优解!

二、解题思路(栈)

  1. 数字收集:支持 123、456 这种多位数
  2. 运算符判断
    • +:直接入栈
    • -:入栈负数
    • */:立即和栈顶计算,结果覆盖栈顶
  3. 最后把栈里所有数字相加,就是最终结果
  4. 自动跳过空格

三、AC 代码(C 语言)

c运行

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> int calculate(char * s){ int len = strlen(s); int* stack = (int*)malloc(len * sizeof(int)); int top = 0; int num = 0; char op = '+'; for(int i = 0; i < len; i++){ // 收集数字 if(isdigit(s[i])){ num = num * 10 + (s[i] - '0'); } // 遇到运算符 or 末尾,执行计算 if((!isdigit(s[i]) && s[i] != ' ') || i == len - 1){ if(op == '+') stack[top++] = num; else if(op == '-') stack[top++] = -num; else if(op == '*') stack[top-1] *= num; else if(op == '/') stack[top-1] /= num; op = s[i]; num = 0; } } // 求和 int res = 0; for(int i = 0; i < top; i++) res += stack[i]; free(stack); return res; }

四、实现要点(必看)

  1. 多位数处理num = num*10 + s[i]-'0'

  2. 减法变负数入栈最后统一加法,最简洁

  3. 乘除直接算不用等,直接用栈顶计算

  4. 自动跳过空格代码里已经处理,不用额外判断


五、今日收获心得

  1. 表达式计算 = 栈逆波兰、计算器、括号运算,全是栈。

  2. 运算优先级最优解法乘除立即算,加减入栈最后加。

  3. 代码短、效率高、逻辑清晰面试笔试高频原题!


六、总结

LeetCode 227 是表达式计算必背题。记住一句话:乘除立即算,加减入栈,最后求和直接秒杀!

坚持每日一题,算法稳步提升!

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

相关文章:

  • material studio2024版通行证问题
  • 如何永久备份微信聊天记录:3种格式导出与年度报告生成完整指南
  • 2026年3月精密倒角机源头厂家口碑推荐,数控倒角机/精密倒角机/全自动倒角机/金属倒角机,精密倒角机生产厂家选哪家 - 品牌推荐师
  • YOLO11语义分割注意力机制改进:全网首发--使用MLCA增强主干高层局部与全局通道建模(方案2)
  • Day1 Python 与 C 的类型区别
  • 五一小假期
  • OpenClaw 文档处理Skill
  • Dify车载问答系统开发全链路详解:3天快速集成语音唤醒+离线NLU+多模态反馈(含CAN总线协议适配实录)
  • 如何用ROFL播放器轻松查看所有英雄联盟比赛回放
  • OBS多路推流插件下载安装教程:OBS如何多平台直播?OBS如何多开直播?
  • 别再只用内积和哈达玛积了!手把手教你用SENET和双线性交互层(FiBiNet)提升CTR预估效果
  • 2026.4.30总结
  • Flutter for OpenHarmony 后台自动化适配与实践指南
  • 2026固体粉剂饮料代加工标杆推荐 合规产能双维度解析 - 优质品牌商家
  • 图像生成模型实战避坑指南:从GAN的‘模式坍塌’到扩散模型的‘炼丹’成本,我们该如何选择?
  • ARM浮点运算指令FMINP与FMLA详解及优化实践
  • Ollamac本地AI对话伴侣:隐私优先的图形化大模型部署指南
  • 新概念英语第二册72_A car called Bluebird
  • Obsidian Style Settings:5分钟掌握终极笔记个性化定制指南
  • 2026年中老年相亲怎么选?优质服务商推荐指南
  • ContextHub:统一管理AI编程助手配置,告别配置碎片化
  • FP8量化技术在深度强化学习中的实践与优化
  • 【flutter for open harmony】第三方库Flutter 鸿蒙版 底部导航栏 实战指南(适配 1.0.0)✨
  • 卡梅德生物技术快报|亲和力测定:蒙特卡洛模拟评估与初始浓度优化(MATLAB 实现)
  • 铁路文化品牌选型全维度实测解析 行业推荐参考 - 优质品牌商家
  • 商业综合体仿真绿植绿化工程厂家权威度评测报告 - 优质品牌商家
  • HC-SR04测距不准?STM32环境下5个常见坑点排查与精度优化实战
  • AI智能体工具调用框架openclaw-agents:工程化实践与架构解析
  • 暗黑2存档编辑器完整指南:3分钟打造完美角色,告别枯燥刷怪
  • Cache缓存项目学习2