题目链接:59. 螺旋矩阵 II - 力扣(LeetCode)
给你一个正整数 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
class Solution {
public int[][] generateMatrix(int n) {
int[][] nums=new int[n][n];
int startX=0,startY=0; //每一圈的起始点
int offset=1;
int circle=1; //当前圈数
int i=0,j=0;
int count=1; //要填的数字
while(circle<=n/2){ //一共n/2圈
//顶部
for(j=startY;j<n-offset;j++){
nums[startX][j]=count++;
}//循环结束时j=n-offset
//右列
for(i=startX;i<n-offset;i++){
nums[i][j]=count++;//j=n-offset
}//循环结束时i=n-offset
//底部
//此时j=n-offset,不需要初始化,且i=n-offset
for(;j>startY;j--){
nums[i][j]=count++;//i=n-offset
}//循环结束时j=startY=0
//左列
for(;i>startX;i--){
nums[i][j]=count++;//j=startY=0
}//循环结束时i=startX=0,j=startY=0
startX++;
startY++;
offset++;
circle++;
}
//n为奇数时,需要单独处理中心点
if(n%2!=0){
nums[n/2][n/2]=n*n;
//nums[startX][startY] = count;
}
return nums;
}
}