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; }}