問題描述
- 給定一個包含 m x n 個元素的矩陣(m 行, n 列),請按照順時針螺旋順序,返回矩陣中的所有元素。
示例 1:
輸入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
輸出: [1,2,3,6,9,8,7,4,5]
示例 2:
輸入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
輸出: [1,2,3,4,8,12,11,10,9,5,6,7]
問題分析
可以通過選取列表的第一個元素然後在翻轉矩陣,使得每一次的將取值都位於矩陣的第一行,學習了矩陣翻轉的寫法
代碼
矩陣轉置
matrix = [[1,2,3], [4,5,6], [7,8,9]]
matrix = map(list, zip(*matrix))
print(matrix)
>>>[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
順時針旋轉矩陣
matrix = [[1,2,3], [4,5,6], [7,8,9]]
matrix[:] = map(list,zip(*matrix[::-1]))
print(matrix)
>>>[[7, 4, 1], [8, 5, 2], [9, 6, 3]]
逆時針旋轉矩陣
matrix = [[1,2,3], [4,5,6], [7,8,9]]
matrix[:] = map(list,zip(*matrix))[::-1]
print(matrix)
>>>[[3, 6, 9], [2, 5, 8], [1, 4, 7]]
問題代碼
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
res = []
while matrix:
res += matrix.pop(0)
matrix = list(map(list, zip(*matrix)))[::-1]
return res