更多精彩内容,请关注【力扣中等题】。
题目
难度:★★★☆☆
类型:矩阵,二维数组
方法:寻找规律
给定一个包含 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]
解答
为了螺旋遍历矩阵,我们需要解决几个关键问题:
-
如何确定直线的方向?以及如何换向?
-
如何确定直线移动的边界?
这两个问题我们这样解决,每次走一步,设置方向偏移量di,dj分别为0,1,初始情况下向右方开始遍历,将每次遍历后的位置置空,是否需要换向,可以通过判断前方是否为矩阵边界或空来实现。右转弯换向操作为:di, dj = dj, -di,然后继续遍历即可。
class Solution:
def spiralOrder(self, matrix):
"""
:param matrix: List[List[int]]
:return: List[int]
"""
res, i, j, di, dj = [], 0, 0, 0, 1
if matrix:
for _ in range(len(matrix) * len(matrix[0])):
res.append(matrix[i][j])
matrix[i][j] = None
next_step = matrix[(i + di) % len(matrix)][(j + dj) % len(matrix[0])]
if next_step is None:
di, dj = dj, -di
i += di
j += dj
return res
如有疑问或建议,欢迎评论区留言~
网友评论