leetcode 59.螺旋矩阵
发布人:shili8
发布时间:2025-01-24 00:46
阅读次数:0
**螺旋矩阵**
给定一个正整数 `n`,生成一个按照螺旋顺序填充的矩阵。
**示例1:**
输入:`n =3`
输出:
[ [1,2,3], [8,9,4], [7,6,5] ]
**示例2:**
输入:`n =1`
输出:
[ [1] ]
**示例3:**
输入:`n =2`
输出:
[ [1,2], [4,3] ]
**解决方案**
我们可以使用一个简单的算法来生成螺旋矩阵。该算法涉及以下步骤:
1. 初始化一个 `n x n` 的矩阵,所有元素都为0。
2. 从左上角开始填充矩阵,从1 到 `n * n` 的数字。
3. 每次填充一个数字后,将其所在行和列的下标记为已访问。
4. 如果当前位置是右下角,则停止填充。
**代码实现**
class Solution: def generateMatrix(self, n: int) -> List[List[int]]: # 初始化矩阵 matrix = [[0] * n for _ in range(n)] # 初始化行和列的下标 row_start, row_end =0, n -1 col_start, col_end =0, n -1 # 初始化数字序号 num =1 while row_start <= row_end and col_start <= col_end: # 从左到右填充第一行 for i in range(col_start, col_end +1): matrix[row_start][i] = num num +=1 # 从上到下填充最后一列 for i in range(row_start +1, row_end +1): matrix[i][col_end] = num num +=1 # 从右到左填充最后一行 if row_start != row_end: for i in range(col_end -1, col_start -1, -1): matrix[row_end][i] = num num +=1 # 从下到上填充第一列 if col_start != col_end: for i in range(row_end -1, row_start, -1): matrix[i][col_start] = num num +=1 # 更新行和列的下标 row_start +=1 row_end -=1 col_start +=1 col_end -=1 return matrix
**注释**
* `row_start` 和 `row_end` 表示矩阵中当前正在填充的行的下标。
* `col_start` 和 `col_end` 表示矩阵中当前正在填充的列的下标。
* `num` 表示当前需要填充的数字序号。
**测试**
solution = Solution() print(solution.generateMatrix(3)) # 输出: # [ # [1,2,3], # [8,9,4], # [7,6,5] # ] print(solution.generateMatrix(1)) # 输出: # [[1]] print(solution.generateMatrix(2)) # 输出: # [ # [1,2], # [4,3] # ]
**总结**
本文介绍了如何使用一个简单的算法生成螺旋矩阵。该算法涉及从左上角开始填充矩阵,从1 到 `n * n` 的数字,每次填充一个数字后,将其所在行和列的下标记为已访问。如果当前位置是右下角,则停止填充。