题目链接

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。**

示例

示例1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]

提示

  • 0 <= matrix.length <= 100
  • 0 <= matrix[i].length <= 100

    思路

    本题与0054-螺旋矩阵相同。区别是本题 matrix 大小可以取 0

    题解

    1. class Solution:
    2. def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
    3. ret = []
    4. if not matrix or len(matrix) == 0 or len(matrix[0]) == 0:
    5. return ret
    6. m, n = len(matrix), len(matrix[0])
    7. left, right = 0, n - 1
    8. top, bottom = 0, m - 1
    9. totalNum = m * n
    10. while totalNum > 0:
    11. for i in range(left, right + 1):
    12. if totalNum == 0:
    13. break
    14. ret.append(matrix[top][i])
    15. totalNum -= 1
    16. top += 1
    17. for i in range(top, bottom + 1):
    18. if totalNum == 0:
    19. break
    20. ret.append(matrix[i][right])
    21. totalNum -= 1
    22. right -= 1
    23. for i in range(right, left - 1, -1):
    24. if totalNum == 0:
    25. break
    26. ret.append(matrix[bottom][i])
    27. totalNum -= 1
    28. bottom -= 1
    29. for i in range(bottom, top - 1, -1):
    30. if totalNum == 0:
    31. break
    32. ret.append(matrix[i][left])
    33. totalNum -= 1
    34. left += 1
    35. return ret

    复杂度分析

  • 时间复杂度:29.顺时针打印矩阵 - 图1

  • 空间复杂度:29.顺时针打印矩阵 - 图2