本题也不难,最开始我用deque的方法做出了,但是更加费空间,所以看了下答案,答案思路一致,但是简化的更好:

    • 遇到*/的时侯,进行计算
    • 遇到+-,推进Stack<Integer>

      • 根据之前的operator,来决定存正还是负
    • 空间复杂度: 227. Basic Calculator II - 图1

    • 时间复杂度:227. Basic Calculator II - 图2

    代码远比描述更好懂,直接上代码了:

    1. class Solution {
    2. public int calculate(String s) {
    3. int result = 0;
    4. Stack<Integer> stack = new Stack<>();
    5. char operator = '+';
    6. int curr = 0;
    7. for (int i = 0; i < s.length(); ++i) {
    8. char ch = s.charAt(i);
    9. if (ch == ' ') {
    10. continue;
    11. }
    12. else if (ch >= '0' && ch <= '9') {
    13. curr = curr * 10 + (ch - '0');
    14. }
    15. else {
    16. if (operator == '+') {
    17. stack.push(curr);
    18. }
    19. else if (operator == '-') {
    20. stack.push(-curr);
    21. }
    22. else if (operator == '*') {
    23. stack.push(stack.pop() * curr);
    24. }
    25. else if (operator == '/') {
    26. stack.push(stack.pop() / curr);
    27. }
    28. curr = 0;
    29. operator = ch;
    30. }
    31. }
    32. if (operator == '+') {
    33. stack.push(curr);
    34. }
    35. else if (operator == '-') {
    36. stack.push(-curr);
    37. }
    38. else if (operator == '*') {
    39. stack.push(stack.pop() * curr);
    40. }
    41. else if (operator == '/') {
    42. stack.push(stack.pop() / curr);
    43. }
    44. while (!stack.isEmpty()) {
    45. result += stack.pop();
    46. }
    47. return r