Overview
Implement a basic calculator to evaluate a simple expression string containing:
- digits (
0-9) +,-(,)- spaces
Constraints
1 <= s.length <= 30,000sconsists of digits,+,-,(,), and spaces.- The expression is always valid.
Examples
calculate("1 + 1"); // => 2
calculate(" 2-1 + 2 "); // => 3
calculate("(1+(4+5+2)-3)+(6+8)"); // => 23Solution
Reveal solution
function calculate(s) {
let result = 0, num = 0, sign = 1;
const stack = [];
for (const c of s) {
if (c >= '0' && c <= '9') {
num = num * 10 + (c - '0');
} else if (c === '+' || c === '-') {
result += sign * num;
num = 0;
sign = c === '+' ? 1 : -1;
} else if (c === '(') {
stack.push(result);
stack.push(sign);
result = 0;
sign = 1;
} else if (c === ')') {
result += sign * num;
num = 0;
result *= stack.pop(); // sign
result += stack.pop(); // prev result
}
}
return result + sign * num;
}Resources
basic-calculator.js
Basic Calculator
hardcodingAlgorithmsStack
Overview
Implement a basic calculator to evaluate a simple expression string containing:
- digits (
0-9) +,-(,)- spaces
Constraints
1 <= s.length <= 30,000sconsists of digits,+,-,(,), and spaces.- The expression is always valid.
Examples
calculate("1 + 1"); // => 2
calculate(" 2-1 + 2 "); // => 3
calculate("(1+(4+5+2)-3)+(6+8)"); // => 23Solution
Reveal solution
function calculate(s) {
let result = 0, num = 0, sign = 1;
const stack = [];
for (const c of s) {
if (c >= '0' && c <= '9') {
num = num * 10 + (c - '0');
} else if (c === '+' || c === '-') {
result += sign * num;
num = 0;
sign = c === '+' ? 1 : -1;
} else if (c === '(') {
stack.push(result);
stack.push(sign);
result = 0;
sign = 1;
} else if (c === ')') {
result += sign * num;
num = 0;
result *= stack.pop(); // sign
result += stack.pop(); // prev result
}
}
return result + sign * num;
}Resources
NameTopicDifficulty
103 of 103 problems