我的思路整体没什么问题,这个螺旋矩阵的关键就是这个边界的处理
-
首先我们要知道遍历多少圈
- kaer这里得出了圈数为n/2
- 我这里不太清楚,我直接利用一个递推公式进行推导的
-
之后是四个循环,分别对应上右下左四个循环,每个循环都是左闭右开,每一轮循环,都要改变这个边界的值
- 在这个地方我意识到了当中心点只有一个元素的时候,这四个左闭右开的循环无法执行,所以要进行判断。kaer的方法是如果是奇数,那么中心点就是一个,如果不是奇数那么中心点就是一圈,可以执行
- 我的思路是对于这个结束的时候进行判断,当最后一圈的时候,发现无法执行循环了,就代表只有一个元素,直接赋值即可
class Solution {
public int[][] generateMatrix(int n) {
int[][] arr = new int[n][n];
//直接定义这四个循环
int count = 1;
//确认需要遍历多少圈
if(n>=3){
int[] arr1 = new int[n];
arr1[0]=1;
arr1[1]=1;
int i = 2;
while(i<n){
arr1[i] = 1 + arr1[i-2];
i++;
}
count = arr1[n-1];
}
int num = 1,i=0,j=0;
int q = 1;
while(num<=count){
//判断这一圈是只有一个还是有多个
if(num==count&&j>=n-num){
arr[i][j] = q;
break;
}
//这里面有四个循环
for( ; j<n-num;j++){
arr[i][j] = q;
q++;
}
for( ; i<n-num;i++){
arr[i][j] = q;
q++;
}
for( ; j>-1+num ; j--){
arr[i][j] = q;
q++;
}
for( ; i>-1+num ; i--){
arr[i][j] = q;
q++;
}
i++;
j++;
num++;//下一圈
}
return arr;
}
}
848

被折叠的 条评论
为什么被折叠?



