54. 螺旋矩阵 给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。 输入:[[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]
时间: 2023-09-14 19:09:27 浏览: 82
您可以使用模拟法来解决这个问题。具体的步骤如下:
1. 定义四个变量,分别代表矩阵的上下左右四个边界。
2. 定义一个变量,代表当前遍历到的方向(向右、向下、向左、向上),并初始化为向右。
3. 定义一个结果数组,用于存储遍历的结果。
4. 在循环中,根据当前的方向遍历矩阵。如果到达边界,就更改方向,并更新相应的边界。
5. 当遍历完所有元素后,返回结果数组即可。
下面是实现这个算法的 Python 代码:
```
def spiralOrder(matrix):
if not matrix:
return []
res = []
top, bottom, left, right = 0, len(matrix) - 1, 0, len(matrix[0]) - 1
direction = 0
while top <= bottom and left <= right:
if direction == 0:
for i in range(left, right + 1):
res.append(matrix[top][i])
top += 1
elif direction == 1:
for i in range(top, bottom + 1):
res.append(matrix[i][right])
right -= 1
elif direction == 2:
for i in range(right, left - 1, -1):
res.append(matrix[bottom][i])
bottom -= 1
else:
for i in range(bottom, top - 1, -1):
res.append(matrix[i][left])
left += 1
direction = (direction + 1) % 4
return res
```
这个代码的时间复杂度是 $O(mn)$,其中 $m$ 和 $n$ 分别是矩阵的行数和列数。
阅读全文