使用一个start来控制每次从那个边界开始 用一个loop来控制到哪停止
这里使用左闭右开
代码如下:
public int[][] generateMatrix(int n) {
int[][] res = new int[n][n];
int a = 1;
int start = 0;
int loop = 1;
while ( loop <= n/2){
for (int i = start; i <= n-1-loop; i++) {
res[start][i] = a;
a++;
}
for (int i = start; i <= n-1-loop; i++) {
res[i][n-loop] = a;
a++;
}
for (int i = n-loop; i >= loop; i--) {
res[n-loop][i] = a;
a++;
}
for (int i = n-loop; i >= loop; i--) {
res[i][start] = a;
a++;
}
start++;
loop++;
}
if (n%2==1){
res[n/2][n/2] = n*n;
}
return res;
}