0%

leetcode题解54:螺旋矩阵

描述

该题来自于力扣第54题

分析

该题思路很简单,就是模拟螺旋遍历的过程,首先遍历最外面一圈,然后缩小一层,继续遍历这一圈,直到遍历完所有圈。遍历的总层数由矩阵的行数和列数的最小值的一半决定。确定层数后,计算出每一圈的四个角位置,然后按照顺序遍历即可。

代码

python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
m = len(matrix)
n = len(matrix[0])
max_layer = (min(m, n) + 1) // 2
ans = []
for layer in range(max_layer):
for i in range(layer, n-layer):
ans.append(matrix[layer][i])
for i in range(layer+1, m-layer):
ans.append(matrix[i][n-layer-1])
if len(ans) == n * m:
return ans
for i in range(n-layer-2, layer-1, -1):
ans.append(matrix[m-layer-1][i])
for i in range(m-layer-2, layer, -1):
ans.append(matrix[i][layer])
return ans