项目场景:
给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出:[1,2,3,4,8,12,11,10,9,5,6,7]
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100
问题描述
代码实现了一个螺旋遍历二维矩阵的算法,将矩阵中的所有元素按顺时针螺旋顺序提取到一个列表中。代码通过定义四个方向(右、下、左、上)来控制遍历路径,从矩阵的左上角开始,依次访问每个元素并将其添加到结果列表中,同时将访问过的元素标记为 None
以避免重复访问。当遍历到矩阵边界或已访问过的位置时,方向会顺时针切换。最终,代码在遍历完所有 m * n
个元素后,返回按螺旋顺序排列的元素列表。
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
DIRS=(0,1),(1,0),(0,-1),(-1,0)#右下左上
m,n=len(matrix),len(matrix[0])
ans=[]
i=j=di=0
for _ in range(m*n):
ans.append(matrix[i][j])
matrix[i][j]=None
x,y=i+DIRS[di][0],j+DIRS[di][1]
if x<0 or x>=m or y<0 or y>=n or matrix[x][y] is None:
di=(di+1)%4
i+=DIRS[di][0]
j+=DIRS[di][1]
return ans
本题提交情况。
以上为本篇文章的全部内容,感谢你抽出宝贵的时间阅读这篇文章。如果你有任何疑问或建议,欢迎在评论区留言,我们一起交流进步。愿你的代码之路越走越顺,生活充满阳光!