算法列表

227. 基本计算器 II 中等

布莱克2026-04-01 13:59

问题:

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

整数除法仅保留整数部分。

你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。

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

示例 1:

输入:s = "3+2*2"
输出:7

示例 2:

输入:s = " 3/2 "
输出:1

示例 3:

输入:s = " 3+5 / 2 "
输出:5

回答:

因为字符中包含空格,首先正则替换去除所有空格

初始化符合为+号,初始化num为0,遍历字符串,当遇到符号的时候,按之前的符号决定目前的数字进行什么操作

+号将数字push进数组,-号则将数字变为负数push进数组

*号将数组的最后一位pop出来与当前数字相乘并push进数组,/号同理,不过是相除后取整

var calculate = function(s) {
    s = s.replace(/\s/g, '')
    let stack = [];
    let num = 0;
    let sign = '+';
    for (let i = 0; i < s.length; i++) {
        let ch = s[i];
        if (ch <= '9' && ch >= '0') {
            num = num * 10 + ch * 1;
        }
        if (ch < '0' || ch > '9' || 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(Math.trunc(stack.pop() / num)); break;
            }
            sign = ch;
            num = 0;
        }
    }
    return stack.reduce((sum, cur) => {
        return sum + cur;
    }, 0)
};


assistant