当前位置:实例文章 » 其他实例» [文章]leetcode_54 螺旋矩阵

leetcode_54 螺旋矩阵

发布人:shili8 发布时间:2025-01-31 22:25 阅读次数:0

**螺旋矩阵**

给定一个 `m x 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]


**解决方案**

我们可以使用一个简单的算法来实现螺旋序列。该算法从左上角开始,依次遍历右下角、右上角和左下角,然后重复这个过程直到所有元素都被访问。

def spiralOrder(matrix):
 if not matrix:
 return []
 result = []
 while matrix:
 # 从左上角开始 result += matrix.pop(0)
 # 如果右下角存在,向右移动 if matrix and matrix[0]:
 for row in matrix:
 result.append(row.pop())
 # 如果右上角存在,向上移动 if matrix and matrix[-1]:
 for row in reversed(matrix):
 result.append(row.pop(0))
 # 如果左下角存在,向左移动 if matrix and matrix[0]:
 for row in reversed(matrix):
 result.append(row.pop())
 return result# 测试用例matrix = [
 [1,2,3],
 [4,5,6],
 [7,8,9]
]

print(spiralOrder(matrix)) # 输出:[1,2,3,6,9,8,7,4,5]


**注释**

* `if not matrix:` 检查是否存在矩阵。如果不存在,则返回空列表。
* `while matrix:` 使用循环来重复螺旋序列的过程,直到所有元素都被访问。
* `matrix.pop(0)` 从左上角开始,依次遍历右下角、右上角和左下角,然后重复这个过程。
* `for row in matrix:` 遍历矩阵中的每一行。
* `for row in reversed(matrix):` 反转矩阵后,遍历反转后的矩阵中的每一行。

**时间复杂度**

该算法的时间复杂度为 O(m * n),其中 m 和 n 是矩阵的大小。

其他信息

其他资源

Top