螺旋矩阵

🎯 问题描述(来源于LeetCode)

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

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 10
  • -100 <= matrix[i][j] <= 100

示例

  • 示例 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]

💻 解题思路

思路1:四个方向顺序遍历

思路1:代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
m,n=len(matrix),len(matrix[0])
nums=matrix
l=0
r=n-1
b=m-1
t=0
ans=[]
while l<=r and t<=b:
for i in range(l,r+1):
num=matrix[t][i]
ans.append(num)
t+=1
for i in range(t,b+1):
num=matrix[i][r]
ans.append(num)
r-=1
if t<=b:
for i in range(r,l-1,-1):
num=matrix[b][i]
ans.append(num)
b-=1
if l<=r:
for i in range(b,t-1,-1):
num=matrix[i][l]
ans.append(num)
l+=1
return ans

思路1:📊 性能分析

提交结果
  • 运行时间:0ms击败100.00%
  • 内存消耗:17.45MB击败72.08%
复杂度验证
  • 时间复杂度:O(mn)O(m*n)
  • 空间复杂度:O(mn)O(m*n)

思考

通过四个方向的顺序遍历并不断更新四个角的坐标即可