LeetCode 227. 基本计算器 II

更多题解尽在 https://sugar.matrixlab.dev/algorithm 每日更新。
组队打卡,更多解法等你一起来参与哦!

LeetCode 227. 基本计算器 II,难度中等

解题思路:创建一个栈用于保存操作数。遍历字符串,如果当前字符是“ ± 运算符”,则压入栈中;如果当前字符是“ */ 运算符”,则从栈中取数计算后重新压入栈中。最后将栈中的数据累加。

为什么运算符是后更新?
这是因为我们需要在处理当前数字和前一个运算符之后再更新运算符,以确保当前数字被正确处理。

class Solution {
    public int calculate(String s) {
        if (s.isEmpty()) return 0;
        Stack<Integer> stack = new Stack<>();
        int result = 0;
        // 当前数字
        int num = 0;
        char sign = '+';
        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) {
                switch (sign) {
                    case '+':
                        // 将当前数字压入栈
                        stack.push(num);
                        break;
                    case '-':
                        // 将当前数字的相反数压入栈
                        stack.push(-num);
                        break;
                    case '*':
                        // 弹出栈顶元素,与当前数字相乘后压入栈
                        stack.push(stack.pop() * num);
                        break;
                    case '/':
                        // 弹出栈顶元素,与当前数字相除后压入栈
                        stack.push(stack.pop() / num);
                        break;
                }
                // 更新运算符
                sign = c;
                num = 0;
            }
        }

        // 将栈内数据累加
        for (int i : stack) {
            result += i;
        }
        return result;
    }
}

相关推荐

  1. LeetCode 227. 基本计算器 II

    2024-07-18 12:10:01       23 阅读
  2. LeetCode 224基本计算器

    2024-07-18 12:10:01       55 阅读
  3. 栈-227.基本计算器II(四则运算)

    2024-07-18 12:10:01       27 阅读
  4. Leetcode】772.基本计算器III (Hard)

    2024-07-18 12:10:01       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 12:10:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 12:10:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 12:10:01       58 阅读
  4. Python语言-面向对象

    2024-07-18 12:10:01       69 阅读

热门阅读

  1. 如何实现MySQL的高可用

    2024-07-18 12:10:01       23 阅读
  2. docker安装指导

    2024-07-18 12:10:01       21 阅读
  3. 使用lxml库提取HTML中a标签的href和文本内容

    2024-07-18 12:10:01       23 阅读
  4. 一些数据库专家称,最新的 MySQL 版本令人失望

    2024-07-18 12:10:01       27 阅读
  5. NLP篇8 自然语言处理 使用注意力模型

    2024-07-18 12:10:01       21 阅读
  6. 测试用例设计方法

    2024-07-18 12:10:01       17 阅读
  7. Mongodb使用索引进行查询优化

    2024-07-18 12:10:01       23 阅读
  8. 计算机视觉——OpenCV C++实现凸包

    2024-07-18 12:10:01       22 阅读
  9. python logging 避免日志重复打印

    2024-07-18 12:10:01       22 阅读