旺崽的博客

要么天赋异禀,要么天道酬勤

0%

LeetCode 54 螺旋矩阵

题目链接

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:

在这里插入图片描述

1
2
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

示例 2:

在这里插入图片描述

1
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]

找规律~
拿样例来说明,对样例一:

1
2
3
4
5
6
7
8
9
10
11
12
13
1 2 3
4 5 6
7 8 9
我们先拿出第一个列表元素 [1,2,3]
此时矩阵为 [[4,5,6],[7,8,9]]
我们从矩阵的每一列表元素里各取一个元素组成新矩阵 [[4,7],[5,8],[6,9]]
再倒置,得到 [[6,9],[5,8],[4,7]]
再拿出第一个列表元素 [6,9]
此时矩阵为 [[5,8],[4,7]]
从矩阵的每一列表元素里各取一个元素组成新矩阵 [[5,4],[8,7]]
再倒置,得到 [[8,7],[5,4]]
再拿出第一个列表元素...
直至矩阵为空

对样例二我们发现也是重复上述过程,这个规律的关键就是 从矩阵的每一列表元素里各取一个元素组成新矩阵,而 Python 中恰有这样的一个函数 zip,AC 代码如下:

1
2
3
4
5
6
7
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
res = []
while matrix:
res += matrix.pop(0)
matrix = list(zip(*matrix))[::-1]
return res