元宝 LeetCode 227. 基本计算器 II Java实现

发布时间:2026/10/5 10:27:36

元宝    LeetCode 227. 基本计算器 II Java实现 LeetCode 227. 基本计算器 II — Java 题解题目计算一个字符串表达式的值表达式包含非负整数运算符“”“-”“*”“/”无括号整数除法向零截断输入: “32*2” → 7输入: 3/2 → 1输入: 35 / 2 → 5核心思路“*”“/” 优先级高 → 立即计算“”“-” 优先级低 → 延迟处理维护 4 个状态变量单次扫描即可变量 含义“num” 正在读取的当前数字“last” 上一个数用于“*”“/”“sign” 上一个“”/“-” 运算符“res” 累计结果核心等式“res res sign * last”✅ 解法一单次扫描O(1) 空间推荐class Solution {public int calculate(String s) {int num 0, res 0, last 0;char sign ‘’;for (int i 0; i s.length(); i) { char c s.charAt(i); // 1. 构建数字 if (Character.isDigit(c)) { num num * 10 (c - 0); } // 2. 遇运算符 或 到末尾 → 处理 if ((!Character.isDigit(c) c ! ) || i s.length() - 1) { if (sign ) { res last; // 结算上一个数 last num; // 当前数等待后续 } else if (sign -) { res last; last -num; // 负数 } else if (sign *) { last last * num; // 立即算 } else if (sign /) { last last / num; // 立即算向零截断 } sign c; // 记录运算符作用于下一个数 num 0; } } return res last; // 别忘了最后一个 }}解法二栈更直观O(n) 空间class Solution {public int calculate(String s) {Deque stack new ArrayDeque();char sign ‘’;int num 0;for (int i 0; i s.length(); i) { char c s.charAt(i); if (Character.isDigit(c)) { num num * 10 (c - 0); } if ((!Character.isDigit(c) c ! ) || i s.length() - 1) { if (sign ) stack.push(num); else if (sign -) stack.push(-num); else if (sign *) stack.push(stack.pop() * num); else if (sign /) stack.push(stack.pop() / num); sign c; num 0; } } int res 0; while (!stack.isEmpty()) res stack.pop(); return res; }}执行过程演示表达式: “32*2-6/4”读取 3 → num3遇 ‘’ → last3, res0, sign‘’读取 2 → num2遇 ‘’ → last326, sign’*’读取 2 → num2遇 ‘-’ → res6 → res6; last-2, sign‘-’读取 6 → num6遇 ‘/’ → last-2… (实际 last 已更新为 -6 后再除)正确推演按代码:res6, last 经历: 3 → 6 → -6 → -6/4-1返回: res last 6 (-1) 5 ✅复杂度时间“O(n)” — 只扫描一次空间“O(1)”单次扫描/“O(n)”栈⚠️ 易错点易错点 说明空格 需跳过“’ ”末尾数字 循环结束还要再处理一次多位数“num num*10 (c-‘0’)”除法截断 Java“/” 对正数天然向零负数如“-3/2 -1”首个无符号 初始化“sign ‘’” 考点总结运算符优先级“*”“/” “”“-”延迟计算低优先级暂存高优先级立即算字符串解析逐字符构建数字栈 / 状态机把表达式转成加法序列无括号简化若有括号LC 224需加递归或分层面试口诀遇“*”“/” → 马上算遇“”“-” → 先记下遇数字 → 累加构建
延伸阅读

更多相关文章

2026/10/5 10:27:36

Python 中 类变量 vs 全局变量

Python:类变量 vs 全局变量一、定义 & 存放位置全局变量定义在函数、类外部,属于模块对象,保存在模块的 __dict__。g_val 100 # 全局变量,模块级别def test():print(g_val)类变量写在 class 内部、方法外面,属于…

2026/10/5 11:32:40

C#仓库条码管理系统实战:扫码枪接入、库存流水与打印状态机

简介:一份基于 C# 的仓库条码管理系统毕业设计源码,面向计算机相关专业学生及初阶仓库管理开发者。系统采用 Windows Forms 构建界面,围绕条形码扫描实现入库、出库、库存查询与报表生成等核心模块,有助于理解 C# 面向对象编程、窗…

2026/10/5 11:32:40

GESP六级树的遍历:从递归序到非递归,再到还原二叉树

树的遍历,在GESP六级大纲里就像是树这个章节的“敲门砖”。我带过的很多学生,最初都觉得不过就是三种递归写法嘛,背下来就完了,结果到了考场上,一道“已知中序和后序,让你求前序”直接傻眼,或者…

2026/10/5 11:32:40

一文看懂Linux文件类型:从ls -l到inode,彻底搞清七种类型

刚接手一台陌生的 Linux 服务器,或者第一次打开某个开源项目的源码目录时,我几乎都会敲一遍ls -l。这一敲,第一列那一串十个字符,就是整个文件系统的"身份证明"。很多新手盯着drwxr-xr-x、-rw-r--r--发呆,只…

2026/10/5 11:32:40

无摩擦支付:消费双刃剑与实操止损清单

支付越“丝滑”,花钱越“随意”?这份报告把无摩擦支付的消费双刃剑讲透了——附实操止损清单 作为一个和支付产品打了多年交道的人,我太熟悉“无摩擦支付”这个词了。从最初的密码输入,到指纹支付、刷脸支付,再到现在…

2026/10/5 11:32:40

插件加载失败排查:从‘did not activate‘到系统化解决

去年年中我在维护一个内部工具平台的插件模块时,几乎每天都会被类似这样的报错信息折磨:"failed to load plugins web boot: 2 entries did not activate"、"harness failed to load plugins web boot: 1 entry did not activate huayu-y…

2026/10/5 11:27:40

MATLAB/Simulink雷达仿真实战:从信号建模到目标检测

1. 为什么非要用 MATLAB/Simulink 做雷达仿真1.1 雷达仿真到底在仿什么先聊个实际的场景。我去年接手了一个车载毫米波雷达的项目,硬件平台还没到位,算法团队天天喊着要调参,测试场地排期又遥遥无期。当时如果没有一套趁手的仿真工具&#xf…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/4 1:01:05

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑