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

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` 的数字,每次填充一个数字后,将其所在行和列的下标记为已访问。如果当前位置是右下角,则停止填充。

其他信息

其他资源

Top