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;
};``````