给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]
解题思路:
1.定义循环圈数loop,正方形矩阵的圈数为n/2(奇数矩阵会多余一个中心元素);
2.分为上下左右逐步给r[i][j]赋值。
public static int[][] generateMatrix(int n) {
int[][] result=new int[n][n];
int i,j; //位置变量
int start=0; //每次的开始位置
int count=0; //填入数字
int loop=1; //定义循环圈数(正方形矩阵的外围圈数为n/2)
while (loop<=n/2){ //如果是偶数矩阵,则n/2次;奇数矩阵,n/2后会余下中心元素
//上边:从左到右
for(j=start;j<n-loop;j++){
count++;
result[start][j]=count; //行不变,列递增
}
//右边:从上到下
for(i=start;i<n-loop;i++){
count++;
result[i][j]=count; //行递增,列不变
}
//下边:从右到左
for(;j>=loop;j--){
count++;
result[i][j]=count; //行不变,列递减
}
//左边:从下到上
for(;i>=loop;i--){
count++;
result[i][j]=count; //行递减,列不变
}
loop++;
start++;
}
if(n%2==1){ //如果奇数矩阵,则中心位置元素为count
count++;
result[start][start]=count;
}
return result;
}