基本计算器
描述
给你一个字符串表达式 s
,请你实现一个基本计算器来计算并返回它的值。
注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval()
。
提示:
1 <= s.length <= 3 * 105
s 由数字、'+'、'-'、'('、')'、和 ' ' 组成
s 表示一个有效的表达式
'+' 不能用作一元运算(例如, "+1" 和 "+(2 + 3)" 无效)
'-' 可以用作一元运算(即 "-1" 和 "-(2 + 3)" 是有效的)
输入中不存在两个连续的操作符
每个数字和运行的计算将适合于一个有符号的 32位 整数
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/basic-calculator
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
栈存临时结果和符号
代码
class Solution { public int calculate(String s) { Deque<Integer> stack = new ArrayDeque<>(); int sign = 1;//1:正,0:负 int res = 0; int length = s.length(); char[] chars = s.toCharArray(); for (int i = 0; i < length; i++) { char ch = chars[i]; if (Character.isDigit(ch)){ int cur = ch - '0'; while (i+1 < length && Character.isDigit(chars[i+1])){ cur = cur * 10 + (chars[i+1] - '0'); i++; } res = res + sign * cur; } else if (ch == '+'){ sign = 1; } else if (ch == '-'){ sign = -1; } else if (ch == '('){ stack.push(res); res = 0; stack.push(sign); sign = 1; } else if (ch == ')'){ res = stack.pop() * res + stack.pop(); } } return res; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)