给你一个正整数 n ,生成一个包含 1 到 n*n 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
解决问题: 一开始想的代码及其复杂,最重要的一点就是区间没有解决好,如果每次都处理长度相同的列/行困难就会少很多,这里着重讲一下优化的思路
- 首先我们要确定绕多少圈,经过计算得知是n/2圈,这里注意如果是n是奇数还要最后判断并往矩阵中心赋值
- 然后定义起始的x和y坐标作为标定,也就是循环不变量,接着kk开始转一圈,第一条从y开始,所以j起始于start_y,但是这里要注意,偏移值也就是我们每次要处理的固定长度与n的差,可以想到第一圈是1,那么第m圈就是m
- 在处理完四条边后,起始的x和y都要进行增加,相应的偏移也要随着圈数的增加而增加
public int[][] generateMatrix(int n) {
//起始位置
int start_x=0;
int start_y=0;
int offset=1;
int count=1;
int[][] nums=new int[n][n];
int runs=n/2;
int temp=0;
int i=0,j=0;
while(temp<runs){
temp++;
for(j=start_y;j<n-offset;j++){
nums[start_x][j]=count++;
}
for(i=start_x;i<n-offset;i++){
nums[i][j]=count++;
}
for(;j>start_y;j--){
nums[i][j]=count++;
}
for(;i>start_x;i--){
nums[i][j]=count++;
}
start_y++;
start_x++;
offset++;
}
if(n%2==1){
nums[start_x][start_y]=count;
}
return nums;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。