LeetCode-54、螺旋矩阵-中等
给定一个包含 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]
代码1:每提取第一行,逆时针旋转90°
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
res = []
while matrix:
res += matrix.pop(0)
matrix = list(map(list, zip(*matrix)))[::-1]
return res
# zip()函数:https://www.runoob.com/python/python-func-zip.html
# map()函数:https://www.runoob.com/python/python-func-map.html

代码2:模拟
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
res = []
m = len(matrix)
if m == 0:
return res
n = len(matrix[0])
num = min(m, n)
for x in range((num+1)//2):
for j in range(x, n-x, 1):
res += [matrix[x][j]]
if m-1-x > x:
for i in range(x+1, m-x, 1):
res += [matrix[i][n-1-x]]
if n-1-x > x+1:
for j in range(n-2-x, x, -1):
res += [matrix[m-1-x][j]]
if n-1-x > x:
for i in range(m-1-x, x, -1):
res += [matrix[i][x]]
return res

本文详细解析了LeetCode上的螺旋矩阵题目,提供了两种解决方案:一种是通过每提取第一行并逆时针旋转矩阵来实现;另一种是通过模拟螺旋路径遍历矩阵。这两种方法均能按顺时针螺旋顺序返回矩阵的所有元素。

402

被折叠的 条评论
为什么被折叠?



