螺旋矩阵 II
给你一个正整数 n ,生成一个包含 1 到 n2
所有元素,且元素按顺时针
顺序螺旋排列的 n x n 正方形矩阵 res。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
题解
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;
//定义偏移量,对于本题而言,具体是指第一个循环,循环填充到2就停了,还有3没有填,这个3偏移了一格
int offest = 1;
while(loop > 0){
//赋值给i,j
int i = StartX;
int j = StartY;
//填充数字,1,2
for(; j < StartY + n - offest; ++j){
res[i][j] = count++;
}
//填充数组3,4
for(; i < StartX + n - offest; ++i){
res[i][j] = count++;
}
//填充5,6
for(;j > StartY; --j ){
res[i][j] = count++;
}
//填充 7,8
for(;i > StartX; --i ){
res[i][j] = count++;
}
//偏移量两格
offest+=2;
//起始索引加一
StartX+=1;
StartY+=1;
//循环次数减一
loop--;
}
//填充n为奇数的中间数字,如图数字 9
if(n % 2 == 1){
res[n / 2][ n / 2] = n * n;
}
//返回二维数组
return res;
}
}
- 如下图,是对于偏移量的详解: