题目描述
给你一个正整数
n
,生成一个包含1
到n2
所有元素,且元素按顺时针顺序螺旋排列的n x n
正方形矩阵matrix
。示例 1:
输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:
输入:n = 1 输出:[[1]]提示:
1 <= n <= 20
Java思路和题解
class Solution {
public int[][] generateMatrix(int n) {
int[][] nums = new int[n][n];
/**
* 首先 对于nxn 矩阵,螺旋递增 保证 左开右闭或者 左闭右开 原则 摆正每条边处理的一致性
*
* step 2 确定循环的次数 loop 即是 矩阵半径 n/2 (n 为奇数时 中心点的值 为单点 不影响循环次数)
*/
// 行初始值
int startx=0;
//列初始值
int starty=0;
//计算元素值
int count=1;
//控制每条边的长度
int offset=1;
//需要的圈数
int loop=0;
int i,j;
while(loop<n/2){
i=startx;
j=starty;
/**
* 每条边移动遵循左闭右开原则
*/
//上边 x 位置不动,y 右移
for(;j<n-offset;j++){
nums[i][j]=count++;
}
/**
* j 值 此时位置为 末位置
*/
//右边 y 不动,x++
for(;i<n-offset;i++){
nums[i][j]=count++;
}
//下边 x 不动在 y--
for(;j>starty;j--){
nums[i][j]=count++;
}
//左边
// y不变x--
for(;i>startx;i--){
nums[i][j]=count++;
}
//增加初始位置
startx++;
starty++;
loop++;
offset++;
}
//判断奇数还是偶数 来判断中间位置是否需要填值
if(n%2==1){
nums[startx][starty]=count;
}
return nums;
}
}