题目
思路
之前看的代码随想录的思路,感觉会比较难理解,感觉题解中的K神的思路还是比较好理解的,所以还是用一下K神的思路吧。
思路如下:
- 生成一个
n * n的空矩阵res,随后模拟整个向内环绕的填入过程:- 定义当前左右上下边界
l,r,t,b,初始值num = 1,迭代终止值为tar = n * n; - 当
num <= tar时,始终按照从左到右,从上到下,从右到左,从上到下填入顺序循环,每次填入后。- 执行
num += 1:得到洗一个需要填入的数字; - 更新边界:列如从左到右填完后,上边界
t += 1,相当于上边界向内缩1。
- 执行
- 使用
num <= tar而不是l < r || t < b作为迭代条件,是为了解决当n为奇数时,矩阵中心数字无法在迭代过程中被填充的问题 。
- 定义当前左右上下边界
- 最终返回
res即可。

代码实现
class Solution {
public int[][] generateMatrix(int n) {
int[][] res = new int[n][n];
int l = 0;//左起始位置
int r = n - 1;//起始位置
int t = 0;//上起始位置
int b = n - 1;//下起始位置
int num = 1;//初始数字
int tar = n * n;//最终数字(目标数字)
while(num <= tar){
for(int i = l; i <= r; i++)
res[t][i] = num++;//从左到右
t++;
for(int i = t; i <= b; i++)
res[i][r] = num++;//从上到下
r--;
for(int i = r; i >= l; i--)//从右到左
res[b][i] = num++;
b--;
for(int i = b; i >= t; i--)//从下到上
res[i][l] = num++;
l++;
}
return res;
}
}
本文介绍了一种生成螺旋矩阵的方法,通过定义边界并按顺序填充数字,解决了矩阵中心数字填充问题。适用于n为奇数的情况。
509

被折叠的 条评论
为什么被折叠?



