public class Solution {
/**
* 1:我们可以用一个栈,保存这些(进行乘除运算后的)整数的值。
* 2:对于加减号后的数字,将其直接压入栈中;
* 3:对于乘除号后的数字,可以直接与栈顶元素计算,并替换栈顶元素为计算后的结果。
*
* 记录录每个数字之前的运算符,对于第一个数字,其之前的运算符视为加号。
*
* 加号:将数字压入栈;
* 减号:将数字的相反数压入栈;
* 乘除号:计算数字与栈顶元素,并将栈顶元素替换为计算结果。
*/
// 3 + 2 * 2
public int calculate(String s) {
Integer number = 0;
Stack<Integer> stack = new Stack<Integer>();
Character preOpts = '+';
for(int i = 0; i < s.length();i++){
Character ch = s.charAt(i);
if(Character.isDigit(ch)){
number = number * 10 + s.charAt(i) - '0';
}
if(!Character.isDigit(ch) && ch != ' ' || i == s.length() - 1){
switch (preOpts){
case '+':
stack.push(number);
break;
case '-':
stack.push(-number);
break;
case '*':
stack.push(stack.pop() * number);
break;
case '/':
stack.push(stack.pop() / number);
break;
}
number = 0;
preOpts = ch;
}
}
Integer res = 0;
while (!stack.empty()){
res += stack.pop();
}
return res;
}
}