题目
54. 螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 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]
提示:
- m == matrix.length
- n == matrix[i].length
- 1 <= m, n <= 10
- -100 <= matrix[i][j] <= 100
我的代码(Python)
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
result =[]
m = len(matrix)
n = len(matrix[0])
startR, startC, endR, endC = 0, 0, m, n
direction = 0 # 0: right, 1: down, 2: left, 3: right
i, j = startR, startC
while i >= startR and i < endR and j >= startC and j < endC:
# print(f'i: {i}, j: {j}, direction: {direction}')
result.append(matrix[i][j])
if direction == 0:
if j >= endC - 1:
direction = 1
startR += 1
i += 1
else:
j += 1
elif direction == 1:
if i >= endR - 1:
direction = 2
endC -= 1
j -= 1
else:
i += 1
elif direction == 2:
if j <= startC:
direction = 3
endR -= 1
i -= 1
else:
j -= 1
elif direction == 3:
if i <= startR:
direction = 0
startC += 1
j += 1
else:
i -= 1
return result
点评
难度在于边界条件的判定和方向置换,很容易搞乱。逻辑上没什么困难的。
官方的方式简洁一些,是一次直接添加一圈,不像我是一个元素一个元素添加。
不过时间上差不多,因为for循环的判定次数并没有减少。
大概这也就是基本的解法了。
baddif@gmail.com
AI简历优化站
AI求职跟踪器(建设中)
主站(建设中)
相关平台
Github Issues / Notion / Blog