思路:生成一个 n×n
空矩阵 mat
,随后模拟整个向内环绕的填入过程:
定义当前左右上下边界 top、down、left、right,初始值 num = 1
,迭代终止值 n * n
;
当 num <= tar 时,始终按照 从左到右 从上到下 从右到左 从下到上 填入顺序循环,每次填入后:
执行 num += 1:得到下一个需要填入的数字;
更新边界:例如从左到右填完后,上边界 top += 1,相当于上边界向内缩 1。
public int[][] generateMatrix(int n) {
int[][] res=new int[n][n];
int top=0;
int down=n-1;
int left=0;
int right=n-1;
int num=1;
while(num<=(n*n)){
for(int i=left;i<=right;i++){
res[top][i]=(num++);
}
if(++top>down) break;
for(int i=top;i<=down;i++){
res[i][right]=(num++);
}
if(--right<left) break;
for(int i=right;i>=left;i--){
res[down][i]=(num++);
}
if(--down<top) break;
for(int i=down;i>=top;i--){
res[i][left]=(num++);
}
if(++left>right) break;
}
return res;
}