每次均从(start, start)下标开始遍历一个圈,如果矩阵数组维数是奇数,需额外设置(n/2,n/2)的值。
class Solution {
public int[][] generateMatrix(int n) {
// 循环次数至少为一次,右下左上为一次循环
int loop = 1;
// 每次循环以 (start, start) 数组位置开始
int start = 0;
// 记录数组的值
int val = 1;
// 数组
int[][] arr = new int[n][n];
// 数组下标
int x=0, y=0;
// 循环 n / 2 次
while (loop <= n/2) {
// 左右
y = start;
x = start;
while (y < n-loop) {
arr[x][y] = val++;
y++;
}
// 上下
x = start;
while (x < n-loop) {
arr[x][y] = val++;
x++;
}
// 右左
while (y > loop-1) {
arr[x][y] = val++;
y--;
}
// 下上
while (x > loop-1) {
arr[x][y] = val++;
x--;
}
// 新一圈,起始位置加一
start++;
loop++;
}
if (n%2 == 1) {
arr[start][start] = n*n;
}
return arr;
}
}