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 是矩阵的大小。