请实现一个 Python 函数,接收矩阵的阶数 n,返回一个按螺旋顺序填充数字的 n 阶矩阵(例如从 1 开始,顺时针螺旋递增)。
考察说明
考察对二维数组操作、边界控制和模拟螺旋遍历的编程能力。
回答思路
- 【回答框架 1】定义一个 n×n 的零矩阵,并设置上下左右四个边界变量 top、bottom、left、right,以及当前填充数字 num 从 1 开始。
- 【回答框架 2】使用 while 循环,当 num <= n*n 时,依次按从左到右、从上到下、从右到左、从下到上的顺序填充边界,每填充完一条边就向内收缩对应的边界。
- 【回答框架 3】在填充每条边时,需要判断边界是否重叠(例如 top <= bottom 且 left <= right),避免重复填充。
- 【回答框架 4】边界情况:当 n=0 时返回空矩阵;n=1 时直接返回 [[1]];同时确保 n 为非负整数。
- 【回答框架 5】时间复杂度为 O(n^2),空间复杂度为 O(n^2)(用于存储结果矩阵)。
- 【关键点 1】使用四个边界变量控制螺旋遍历方向。
- 【关键点 2】每填充完一个方向后及时更新边界值。
- 【关键点 3】注意处理边界重叠条件,防止越界或重复填充。
- 【关键点 4】初始化矩阵时确保所有元素为 0 或适当占位。
- 【关键点 5】对于 n=0 或 n=1 的极端情况单独处理。
- 【易错点 1】不注意边界收缩顺序可能导致死循环或填充错位。
- 【易错点 2】在 while 循环中未检查边界大小,可能引发索引错误。
- 【易错点 3】忽略 n=0 情况导致返回错误结果。