力扣224. 基本计算器

224. 基本计算器

给你一个字符串表达式 s,请你实现一个基本计算器来计算并返回它的值。

注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval()。

示例1:

输入: ( s="1+1" )

输出: 2

示例2:

输入: ( s="2-1+2" )

输出: 3

示例3:

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

输出: 23

提示:

  • ( 1 \leq s.length \leq 3 \times 10^5 )
  • s由数字、'+'、'-'、'('、')'、和空格组成
  • s表示一个有效的表达式
  • '+'不能用作一元运算(例如,"+1"和"+(2+3)"无效)
  • '-'可以用作一元运算(即"-1"和"-(2+3)"是有效的)
  • 输入中不存在两个连续的操作符
  • 每个数字和运行的计算将适合于一个有符号的 32位整数
java 复制代码
class Solution {
    public int calculate(String s) {
        Deque<Integer> stack = new ArrayDeque<>();
        stack.push(1);
        int v = 1;
        int ans = 0;
        int i = 0;
        while (i < s.length()) {
            char c = s.charAt(i);
            // 只处理非空格
            if (c != ' ') {
                if (c == '+') {
                    v = stack.peek();
                } else if (c == '-') {
                    v = -stack.peek();
                } else if (c == '(') {
                    stack.push(v);
                } else if (c == ')') {
                    stack.pop();
                } else {
                    int num = 0;
                    while (i < s.length() && Character.isDigit(s.charAt(i))) {
                        num = num * 10 + s.charAt(i) - '0';
                        i++;
                    }
                    ans = ans + v * num;
                    continue;
                }
            }
            i++;
        }
        return ans;
    }
}

解题思路:这道题的官方题解写得比较绕,虽然是使用栈的方法解题,但是并不需要将具体需要计算的数字压入栈中。栈只对加减号±操作,使用栈结构将所有的括号去除,例如-(1-(2-(3-4)))其实可以化简为-1+2-3+4此时直接扫描计算即可,每当遇到正负号和左右括号时都需要对栈做相关的处理,遇到+时当前位置真正的运算符号和栈顶符号相同,-时相反。遇到时将符号压入栈中,时出栈。

相关推荐
先吃饱再说9 小时前
判断回文字符串,从一行代码到双指针优化
算法
黄敬峰12 小时前
深入理解算法核心:从递归思想、数组扁平化到快速排序
算法
得物技术13 小时前
从狂野代码到按目标生产:得物推荐 AI Harness 的工程化实践|AICon 演讲整理
人工智能·算法·架构
AI小老六17 小时前
SkillOpt 架构拆解:把 Skill 文本当参数,用执行轨迹训练 Agent
后端·算法·ai编程
胡萝卜术17 小时前
从“分数打架”到“排名投票”:为什么你的ChatBI必须用RRF?
算法·设计模式·面试
Asize18 小时前
初识DFS 与 BFS:递归、队列与图遍历
算法
罗西的思考1 天前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
CSharp精选营1 天前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
美团技术团队1 天前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法