python顺时针螺旋矩阵_51. 螺旋矩阵(Python)

更多精彩内容,请关注【力扣中等题】。

题目

难度:★★★☆☆

类型:矩阵,二维数组

方法:寻找规律

给定一个包含 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

如有疑问或建议,欢迎评论区留言~

你可能感兴趣的:(python顺时针螺旋矩阵)