class Solution {
public int calculate(String s) {
Stack<Integer> stack = new Stack<Integer>();//用来存储符号
stack.push(1);
int flag = 1;
int i = 0;
int ans = 0;
while(i<s.length()){//相当于把括号拆掉,如果没有括号,则数字前的符号不需要改变
if(s.charAt(i)==' '){
i++;
}
else if(s.charAt(i)=='+'){
flag = stack.peek();
i++;
}
else if(s.charAt(i)=='-'){
flag = -stack.peek();
i++;
}
else if(s.charAt(i)=='('){//每出现一个括号,则压入括号前的符号
stack.push(flag);
i++;
}
else if(s.charAt(i)==')'){//没出现一个反括号,则pop出一个符号
stack.pop();
i++;
}
else{
int num = 0;
while(i<s.length()&&Character.isDigit(s.charAt(i))){//两者位置不能交换
num = num * 10 + (s.charAt(i) - '0');
i++;
}
ans = ans + num * flag;
}
}
return ans;
}
}