螺旋矩阵 II
class Solution {
public int[][] generateMatrix(int n) {
int [][] res = new int[n][n];
//定义每次循环起始位置
int startx = 0;
int starty = 0;
//定义循环次数
int loop = n / 2;
//定义填充数字
int count = 1;
//定义中间位置
int mid = n / 2;
//定义偏移量
int offset = 1;
int i;
int j;
while(loop > 0) {
i = startx;
j = starty;
//模拟填充上行从左到右(左闭右开),i不变,j++,直至到该行末尾(不包含末尾)
for (; j < starty + n - offset; j++) {
res[i][j] = count++;
}
//模拟填充右列从上到下(左闭右开),j不变,i++,直至到该列末尾(不包含末尾)
for (; i < startx + n - offset; i++) {
res[i][j] = count++;
}
//模拟填充下行从右到左(左闭右开),i不变,j--,直至到该行开头(不包含开头)
for (; j > starty; j--) {
res[i][j] = count++;
}
//模拟填充左列从下到上(左闭右开),j不变,i--,直至到该列开头(不包含开头)
for (; i > startx; i--) {
res[i][j] = count++;
}
loop--;
//开始下一圈,起始位置各自加1
startx++;
starty++;
//控制每一条边的长度
offset += 2;
}
//如果n为奇数,单独给矩阵中间的位置赋值
if (n % 2 == 1) {
res[mid][mid] = count;
}
return res;
}
}