java solution,空格字符被隐式忽略跳过了
class Solution {
public int calculate(String s) {
return helper(s.toCharArray(), new int[]{0});
}
private int helper(char [] chars, int[] index) {
int num = 0;
int result = 0;
int sign = 1; //sign是下一个要处理的数字的符号
// 每个表达式在逻辑上都可以看作有一个默认前缀 "0+",所以sign初值为1
// 这样可以统一处理第一个数字,无需特殊判断!
while(index[0] < chars.length) {
//先取出来当前字符
char c = chars[index[0]++];
//然后用if判断,而不是用switch
if(Character.isDigit(c)) {
num = num * 10 + (c - '0');
} else if(c == '+') { //之所以放在最后更新sign, 是因为sign是下一个要处理的数字的符号
result += sign * num; //这里加的是+号前面的数字
num = 0;
sign = 1;
} else if(c == '-') {
result += sign * num;
num = 0;
sign = -1;
} else if(c == '(') {
num = helper(chars, index);
} else if(c == ')') {
break;
}
}
result += sign * num;
return result;
}
}