https://leetcode.com/problems/basic-calculator/
包括括号和+、-的运算式值
public class Solution {
public int calculate(String s) {
// stack保存当前的括号外面的符号去括号后的真实值
Stack<Integer> stack = new Stack();
int sign = 1;
int num = 0;
int res = 0;
stack.push(sign);
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (Character.isDigit(c)) {
num = num * 10 + c - '0';
} else if (c == '+' || c == '-') {
// 因为sign都是去括号后的真实值,所以可以直接加到res上面
res += sign * num;
sign = stack.peek() * (c == '+' ? 1 : -1);
num = 0;
} else if (c == '(') {
stack.push(sign);
} else if (c == ')') {
stack.pop();
}
}
res += sign * num;
return res;
}
}