227. Basic Calculator II
字符串的每一位有三种情况,数字,符号和空格。
- 计算每个操作数
num
, 放入操作数栈stack
中 - 记录每个操作数之前的符号位
sign
,根据符号位的不同采用不同的操作。需要注意最后一个操作数也需要之前记录的符号位对其进行计算 - 最后将操作数栈中所有的结果相加
public int calculate(String s) {
if (s == null || s.length() == 0) return 0;
LinkedList<Integer> stack = new LinkedList<>();
int num = 0;
char sign = '+';
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (Character.isDigit(ch)) {
num = num * 10 + ch - '0';
}
if (!Character.isDigit(ch) && ch != ' ' || i == s.length() - 1) {
if (sign == '+') stack.push(num);
else if (sign == '-') stack.push(-num);
else if (sign == '*') stack.push(stack.pop() * num);
else stack.push(stack.pop() / num);
sign = ch;
num = 0; // clear oprands
}
}
int sum = 0;
for (int n : stack) {
sum += n;
}
return sum;
}