模拟法
我们可以模拟向内环绕的过程依次填入元素到数组中即可。
- 生成一个
m×n
的矩阵tar
,表示内旋过程的总步数 l,r,t,b
代表矩阵的上下左右边界,边界会随着内旋的过程改变num
代表当前步数,开始循环后按照从左至右、从上至下、从右至左、从下至上的顺序执行,每次执行填入数据后将num+=1
,然后更新边界- 最后注意
num
在循环过程中不能大于矩阵大小tar
![](…/images/2021-12-29 3.59.24.png)
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
l, r, t, b = 0, len(matrix[0]) - 1, 0, len(matrix) - 1
res, num, tar = [], 1, len(matrix[0]) * len(matrix)
while num <= tar:
for i in range(l, r + 1):
if num > tar: break
res.append(matrix[t][i])
num += 1
t += 1
for i in range(t, b + 1):
if num > tar: break
res.append(matrix[i][r])
num += 1
r -= 1
for i in range(r, l - 1, -1):
if num > tar: break
res.append(matrix[b][i])
num += 1
b -= 1
for i in range(b, t - 1, -1):
if num > tar: break
res.append(matrix[i][l])
num += 1
l += 1
return res