给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
这是一道模拟题,按照从左上到右上,从右上到右下,从右下到左下,从左下到左上,谨记一个原则是左闭右开,这样最后都能填充到,并且需要修改偏移量(每次加2)和起始坐标(每次加1)。
如果矩阵的维度是奇数,则会有中心元素,额外填充即可。
填充轮数通过n/2来确定,如3维,则只需一轮,4维则需要两轮。
public int[][] generateMatrix(int n) {
int[][] ans=new int[n][n];
int loop=n/2;
int count=1;
int offset=1;
int startX=0;
int startY=0;
int mid=n/2;
while (loop>0){
int i=startX;
int j=startY;
for (; j < startY+n-offset; j++) {
ans[startX][j]=count++;
}
for(;i<startX+n-offset;i++){
ans[i][j]=count++;
}
for(;j>startY;j--){
ans[i][j]=count++;
}
for(;i>startX;i--){
ans[i][j]=count++;
}
loop--;
startX+=1;
startY+=1;
offset+=2;
}
if(n%2==1){
ans[mid][mid]=count;
}
return ans;
}