224. Basic Calculator

给定一个字符串,实现基本计算器计算结果。字符串中包含加、减、空格、括号

字符串除了数字与括号外,只有加减号,如果展开表达式中的所有括号,得到的新表达式中,数字本身不会变化,只是每个数字前面的符号发生变化。

当前位置的字符符号取值:

  • 与字符串中当前位置的运算符有关
  • 如果当前位置处于一系列括号内,与括号前面的运算符有关,每遇到一个以 - 开头的括号,此后的符号都要被反转

当数字字符有多位的情况下,也要进行加减计算。

  • 时间复杂度O(n),空间复杂度O(n)
  • Runtime: 133 ms, faster than 29.54%
  • Memory Usage: 45.7 MB, less than 25.32%
/**
 * @param {string} s
 * @return {number}
 */
var calculate = function(s) {
  s = s.replace(/\s/g, '');
  const stack = [1];
  const len = s.length;
  let res = 0;
  let i = 0;
  let sign = 1;
  while (i < len) {
    const cur = s[i];
    if (cur === '+') {
      sign = stack[stack.length - 1];
      i++;
    } else if (cur === '-') {
      sign = -stack[stack.length - 1];
      i++;
    } else if (cur === '(') {
      stack.push(sign);
      i++;
    } else if (cur === ')') {
      stack.pop();
      i++;
    } else {
      let num = 0;
      while (i < len && /[0-9]/.test(s[i])) {
        num = num * 10 + s.charCodeAt(i) - 48;
        i++;
      }
      res += sign * num;
    }
  }
  return res;
};

推荐阅读更多精彩内容