class Solution {
public int[][] generateMatrix(int n) {
/*
0000
0000
0000
0000
000 0
0
0 0 0 0
0 0 0
0 000
*/
int[][] nn = new int[n][n];
int k = 1;
int x = 0,y = 0;
int loop = n/2;
int qbj = 0;
int hbj = n-1;
while(loop>0){
for(;y<hbj;y++){
nn[x][y]=k;
k++;
}
for(;x<hbj;x++){
nn[x][y]=k;
k++;
}
for(;y>qbj;y--){
nn[x][y]=k;
k++;
}
for(;x>qbj;x--){
nn[x][y]=k;
k++;
}
qbj++;
hbj--;
x=qbj;
y=qbj;
loop--;
}
if(n%2!=0){
nn[n/2][n/2]=n*n;
}
return nn;
}
}
k代表每个数字,x和y代表每次遍历用的,loop代表圈数,qbj前边界hbj后边界,主要就是左闭右开
比如4x4,00-02这三个是一个循环的,03-23是一个循环,33-31是一个,以此类推。
奇数的最后中间会有一个多余的字,它是n*n
这个不算太难,要点就是左闭右开