题目

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:

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

示例 2:

  1. 输入:
  2. [
  3. [1, 2, 3, 4],
  4. [5, 6, 7, 8],
  5. [9,10,11,12]
  6. ]
  7. 输出: [1,2,3,4,8,12,11,10,9,5,6,7]

答案

  1. #
  2. # @lc app=leetcode.cn id=54 lang=python3
  3. #
  4. # [54] 螺旋矩阵
  5. #
  6. # @lc code=start
  7. from typing import List
  8. class Solution:
  9. def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
  10. res = []
  11. while matrix:
  12. # [[4,5,6],[7,8,9]] 弹出[1,2,3]
  13. res += matrix.pop(0)
  14. # [[4,5,6],[7,8,9]] ==> [(4, 7), (5, 8), (6, 9)]
  15. zipping = zip(*matrix)
  16. # [(4, 7), (5, 8), (6, 9)] ==> [[4, 7], [5, 8], [6, 9]]
  17. mapping = map(list, zipping)
  18. #[[4, 7], [5, 8], [6, 9]] ==> [[6, 9], [5, 8], [4, 7]]
  19. matrix = list(mapping)[::-1]
  20. return res
  21. Solution().spiralOrder([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
  22. # @lc code=end

Note

image.png