本文目录
- 1 中文题目
- 2 求解方法:数理逻辑
- 2.1 方法思路
- 2.2 Python代码
- 2.3 复杂度分析
- 3 题目总结
1 中文题目
给定一个正整数 n n n ,生成一个包含 1 1 1 到 n 2 n^2 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n n x n nxn 正方形矩阵 matrix
。
示例:
python">输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
如上图所示。
python">输入:n = 1
输出:[[1]]
提示:
- 1 ≤ n ≤ 20 1\leq n \leq 20 1≤n≤20
2 求解方法:数理逻辑
2.1 方法思路
方法核心
使用四个边界变量控制螺旋方向,按照从左到右、从上到下、从右到左、从下到上的顺序依次填充数字,每填充完一条边就收缩相应的边界,直到填充完所有数字为止。
实现步骤
(1)初始化阶段:
- 创建 n x n 的空矩阵
- 设置四个边界变量
- 初始化填充数字为1
(2)螺旋填充过程:
- 按照固定的顺序填充四条边
- 每填充完一条边,更新对应的边界
- 持续填充直到所有数字用完
(3)边界更新规则:
- 填充完上边后,上边界下移
- 填充完右边后,右边界左移
- 填充完下边后,下边界上移
- 填充完左边后,左边界右移
(4)填充结束条件:
- 当填充数字超过 n 2 n^2 n2时停止,返回填充完成的矩阵
方法示例
以 n = 3
为例:
python">初始状态:
matrix = [[0,0,0],[0,0,0],[0,0,0]]
left = 0, right = 2
top = 0, bottom = 2
num = 1第一圈:
1. 填充上边 (left到right):matrix = [[1,2,3],[0,0,0],[0,0,0]]top = 12. 填充右边 (top到bottom):matrix = [[1,2,3],[0,0,4],[0,0,5]]right = 13. 填充下边 (right到left):matrix = [[1,2,3],[0,0,4],[7,6,5]]bottom = 14. 填充左边 (bottom到top):matrix = [[1,2,3],[8,0,4],[7,6,5]]left = 1最后一个数字:
填充中心位置:
matrix = [[1,2,3],[8,9,4],[7,6,5]]最终结果:
返回 [[1,2,3],[8,9,4],[7,6,5]]
2.2 Python代码
python">class Solution:def generateMatrix(self, n: int) -> List[List[int]]:# 初始化 n x n 的矩阵,填充0matrix = [[0] * n for _ in range(n)]# 定义四个方向的边界left, right = 0, n-1top, bottom = 0, n-1# 当前需要填充的数字num = 1# 循环直到填充完所有数字while num <= n*n:# 从左到右填充上边界for i in range(left, right + 1):matrix[top][i] = numnum += 1top += 1# 从上到下填充右边界for i in range(top, bottom + 1):matrix[i][right] = numnum += 1right -= 1# 从右到左填充下边界for i in range(right, left - 1, -1):matrix[bottom][i] = numnum += 1bottom -= 1# 从下到上填充左边界for i in range(bottom, top - 1, -1):matrix[i][left] = numnum += 1left += 1return matrix
2.3 复杂度分析
- 时间复杂度: O ( n 2 ) O(n²) O(n2)
- 需要填充 n × n n×n n×n个格子
- 每个格子只会被访问一次
- 所有操作都是常数时间
- 空间复杂度:O(1)
- 只使用了固定数量的变量