思路:
注意的是,刚开始觉的既然只有加减法,且没有负数,那么括号去掉不就行了。。。
考虑下面的test case:
Input: "2-(5-6)"
Output: -9
Expected: 3
java code :
public class Solution {
public int calculate(String s) {
Stack<Integer> stack = new Stack<Integer>();
int number = 0, sign = 1, result = 0;
for(int i = 0; i < s.length(); ++i) {
char c = s.charAt(i);
if(Character.isDigit(c)) {
number = 10 * number + (c - '0');
}else if(c == '+') {
result += sign * number;
sign = 1;
number = 0;
}else if(c == '-') {
result += sign * number;
sign = -1;
number = 0;
}else if(c == '(') {
stack.push(result);
stack.push(sign);
sign = 1;
result = 0;
}else if(c == ')') {
result += sign * number;
number = 0;
result *= stack.pop();
result += stack.pop();
}
}
result += sign * number;
return result;
}
}