给定一个字符串,实现基本计算器计算结果。字符串中包含加、减、空格、括号
字符串除了数字与括号外,只有加减号,如果展开表达式中的所有括号,得到的新表达式中,数字本身不会变化,只是每个数字前面的符号发生变化。
当前位置的字符符号取值:
- 与字符串中当前位置的运算符有关
- 如果当前位置处于一系列括号内,与括号前面的运算符有关,每遇到一个以 - 开头的括号,此后的符号都要被反转
当数字字符有多位的情况下,也要进行加减计算。
- 时间复杂度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;
};
网友评论