Given a string s
representing an expression, implement a basic calculator to evaluate it.
Example 1:
Input: s = "1 + 1" Output: 2
Example 2:
Input: s = " 2-1 + 2 " Output: 3
Example 3:
Input: s = "(1+(4+5+2)-3)+(6+8)" Output: 23
Constraints:
1 <= s.length <= 3 * 105
s
consists of digits,'+'
,'-'
,'('
,')'
, and' '
.s
represents a valid expression.
Solution:
/**
* @param {string} s
* @return {number}
*/
var calculate = function(s) {
let len = s.length;
if (len === 0) return 0;
let stack = [];
let res = 0;
let sign = 1;
// remove space
s.replace(" ", "");
for (let i = 0; i < len; i++) {
let n = s.charAt(i);
if (!isNaN(parseInt(n))) {
let cur = parseInt(n);
while (i + 1 < len && !isNaN(parseInt(s.charAt(i + 1)))) {
cur = cur * 10 + parseInt(s.charAt(i + 1));
i++;
}
res += cur * sign;
} else if (n === '-') {
sign = -1;
} else if (n === '+') {
sign = 1;
} else if (n === '(') {
stack.push(res);
res = 0;
stack.push(sign);
sign = 1;
} else if (n === ')') {
res = res * stack.pop() + stack.pop();
}
}
return res;
};