def spiralOrder(self, matrix):
"""
54.螺旋矩阵
top left记录矩阵左上角坐标
bottom right记录矩阵右下角坐标
没遍历完一层后
top left +1
bottom right -1
"""
top, left = 0, 0
bottom, right = len(matrix) - 1, len(matrix[0]) - 1
res = []
while top <= bottom and left <= right:
x, y = top, left
"""
最后遍历的一层分两种情况
一种形式如
1 2
3 4
一种形式如
1 2 3
当最后一层剩一横行时,遍历这一横行完毕break即可
一种形式如
1
2
3
当最后一层剩一列时,遍历这一列完毕break即可
"""
if top == bottom:
while y <= right:
res.append(matrix[x][y])
y += 1
break
if left == right:
while x <= bottom:
res.append(matrix[x][y])
x += 1
break
while y < right:
res.append(matrix[x][y])
y += 1
while x < bottom:
res.append(matrix[x][y])
x += 1
while y > left:
res.append(matrix[x][y])
y -= 1
while x > top:
res.append(matrix[x][y])
x -= 1
top += 1
left += 1
right -= 1
bottom -= 1
return res
54.螺旋矩阵
最新推荐文章于 2024-09-16 21:54:13 发布