[leetcode] problem 224 – basic calculator

Implement a basic calculator to evaluate a simple expression string.

The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .

Example

No.1

Input: “1 + 1”

Output: 2

No.2

Input: “ 2-1 + 2 “

Output: 3

No.3

Input: “(1+(4+5+2)-3)+(6+8)”

Output: 23

Note

  • You may assume that the given expression is always valid.
  • Do not use the eval built-in library function.

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public int (String s) {
Stack<Integer> stack = new Stack<>();
int result = 0;
int num = 0;
int sign = 1;

for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);

if (Character.isDigit(ch)) {
num = 10 * num + (ch - '0');
}
else if (ch == '+' || ch == '-') {
result += sign * num;
num = 0;
sign = ch == '+' ? 1 : -1;
}
else if (ch == '(') {
stack.push(result);
stack.push(sign);
sign = 1;
result = 0;
}
else if (ch == ')') {
result += sign * num;
num = 0;
result *= stack.pop();
result += stack.pop();
}
}

result += sign * num;
return result;
}