1.题目描述
2.解题思路
2.1理解题意
2.2解决方法
2.3完整代码
3.小节
1.题目描述:
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
2.解题思路:
2.1理解题意:
从题目中我们需要注意三点:
1.遍历每一条边时的范围
2.循环次数的奇偶性,偶数直接循环,奇数则需要单独将最后一个数(n*n)放置中心位置处
3.没完成一次循环时,下一次循环的范围
2.2解决方法:
2.3完整代码:
在上述解题方法中,x代表横坐标,相当于第x列;y代表纵坐标,相当于第y行;
但是在数组中, int [][] result = new int[x][y]中x代表第x行;y代表第y列
所以在将坐标传入数组中时,横纵坐标的值需要交换
class Solution {
public int[][] generateMatrix(int n) {
int loop = 0;//控制循环圈数
int count = 1;开始值
int offset = 1;
int startX = 0;起点横坐标
int startY = 0;起点纵坐标
int [][] result = new int[n][n]//新建二维数组,第一个n表示第n行,第二个n表示第n列
int x,y;//x表示纵坐标,y表示横坐标
while(loop++<n/2){
//第一次进来loop=1;第二次进来loop=2
for(x=startX;x<n-offset;x++){
result[startY][x]=count++;
}
for(y=startY;y<n-offset;y++){
result[y][x]=count++;
}
for(;x>startX;x--){
result[y][x]=count++;
}
for(;y>startY;y--){
result[y][x]=count++;
}
//下一次循环时起点的横纵坐标相对于上一次进行了加一
startX++;
startY++;
offset++;
}
//如果n为奇数,就需要获取正方形矩阵的最后一个元素(即n*n)
if(n%2!=0){
result[startY][startX]=n*n;
}
return result;
}
}
3.小节:
著此篇,与君享,互勉之,共进步!