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;
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容