Basic Calculator LeetCode solution in JavaScript

1
var calculate = function (s) {
2
const numStack = [[]];
3
const opStack = [];
4

5
const isNumber = (char) => !isNaN(char);
6

7
function calculate(a, b, op) {
8
if (op === "+") return a + b;
9
if (op === "-") return a - b;
10
}
11

12
let number = "";
13
for (let i = 0; i < s.length; i++) {
14
const char = s[i];
15

16
if (char === " ") continue;
17

18
if (isNumber(char)) {
19
number += char;
20
continue;
21
}
22

23
if (number) {
24
// i.e. char is not a number so the number has ended
25
if (numStack[numStack.length - 1].length === 0) {
26
numStack[numStack.length - 1].push(+number);
27
} else {
28
const a = numStack[numStack.length - 1].pop();
29
const op = opStack.pop();
30
numStack[numStack.length - 1].push(calculate(a, +number, op));
31
}
32

33
number = "";
34
}
35

36
if (char === "(") {
37
if (numStack[numStack.length - 1].length === 0) {
38
numStack[numStack.length - 1].push(0);
39
opStack.push("+");
40
}
41

42
numStack.push([]); // Start a new stack for this parenthesis
43
continue;
44
}
45

46
if (char === ")") {
47
const b = numStack.pop().pop();
48
const a = numStack[numStack.length - 1].pop();
49
const op = opStack.pop();
50
numStack[numStack.length - 1].push(calculate(a, b, op));
51
continue;
52
}
53

54
if (char === "+" || char === "-") {
55
if (numStack[numStack.length - 1].length === 0) {
56
numStack[numStack.length - 1].push(0);
57
}
58

59
opStack.push(char);
60
continue;
61
}
62

63
// We should never reach here
64
throw new Error("Unexpected input: " + char);
65
}
66

67
if (number) {
68
if (numStack[numStack.length - 1].length === 0) return +number;
69

70
const a = numStack[numStack.length - 1].pop();
71
const op = opStack.pop();
72
numStack[0].push(calculate(a, +number, op));
73
}
74

75
return numStack.pop().pop();
76
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0