题目

思路
- 用一个栈,保存这些(进行乘除运算后的)整数的值。
- 遍历字符串 ss,并用变量pre记录每个数字之前的运算符,对于第一个数字,其之前的运算符视为加号。每次遍历到数字末尾后的符号时,说明钱一个数字已经遍历完了,现在根据pre来决定计算方式。
- 加号:将数字压入栈
- 减号:将数字的相反数压入栈
- 乘除号:计算数字与栈顶元素,并将栈顶元素替换为计算结果
- 注意连续数字的累加

代码
class Solution {
public int calculate(String s) {
int length = s.length();
int res = 0;
Stack<Integer> stack = new Stack<>();
char pre = '+';
int num = 0;
for (int i = 0; i < length; i++) {
if (Character.isDigit(s.charAt(i))) {
num = num * 10 + s.charAt(i) - '0';
}
if ((!Character.isDigit(s.charAt(i)) && s.charAt(i) != ' ') || i == length - 1) {
if (pre == '+') {
stack.push(num);
}
if (pre == '-') {
stack.push(-num);
}
if (pre == '*') {
stack.push(num * stack.pop());
}
if (pre == '/') {
stack.push(stack.pop() / num);
}
num = 0;
pre = s.charAt(i);
}
}
while (!stack.isEmpty()) {
res += stack.pop();
}
return res;
}
}