class Solution {
int i = 0;
public int calculate(String s) {
Stack<Integer> stack = new Stack();
int val = 0;
int res = 0;
int sign = 1;
int n = s.length();
int i = 0;
for (char c : s.toCharArray()) {
if (Character.isDigit(c)) {
val = 10 * val + c - '0';
}
else if (c == '+' || c == '-') {
res += val * sign;
val = 0;
sign = c == '+' ? 1 : -1;
}
else if (c == '(') {
stack.push(res);
stack.push(sign);
sign = 1;
res = 0;
}
else if (c == ')') {
res += val * sign;
val = 0;
// multiply sign
res *= stack.pop();
// add val
res += stack.pop();
}
}
res += val * sign;
return res;
}
}
class Solution {
int i = 0;
public int calculate(String s) {
int sign = 1;
int val = 0;
int res = 0;
int n = s.length();
while (i < n) {
char c = s.charAt(i);
++i;
if (Character.isDigit(c)) {
val = 10 * val + c - '0';
}
else if (c == '+' || c == '-') {
res += val * sign;
val = 0;
sign = c == '+' ? 1 : -1;
}
else if (c == '(') {
val = calculate(s);
}
else if (c == ')') {
res += val * sign;
return res;
}
}
res += val * sign;
return res;
}
}