难度:中等 时间:2022年11月20日
难度中等871
给你一个正整数
n
,生成一个包含1
到n2
所有元素,且元素按顺时针顺序螺旋排列的n x n
正方形矩阵matrix
。示例 1:
输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:
输入:n = 1 输出:[[1]]
方法:按层模拟
这道题是接触比较早的一道矩阵问题的题目,感觉整个模拟过程通过代码展示比较有意思。
思路:按照循环次数对写入矩阵的数字顺序进行模拟,设定loop记录循环次数,start记录每次循环起点,count表示自增数字,res表示最终返回的矩阵。没一轮循环都有从左到右、从上到下、从右到左、从下到上这一整个边框的一层的遍历。
class Solution {
public int[][] generateMatrix(int n) {
int loop = 0;//循环次数
int[][] res = new int[n][n];//返回矩阵
int start = 0;//记录每次循环起点
int count = 1;//写入的自增数字
int i = 0 , j = 0;
while(loop++ < n / 2){
// 从左到右
for(j = start; j < n - loop ; j++){
res[start][j] = count++;
}
// 从上到下
for(i = start; i < n - loop ;i++){
res[i][j] = count++;
}
// 从右到左
for(;j >= loop; j--){
res[i][j] = count++;
}
// 从下到上
for(;i >= loop; i--){
res[i][j] = count++;
}
start++;
}
// 判断n是不是是奇数(是则将最后一个数字写入)
if(n%2 == 1){
res[start][start] = count;
}
return res;
}
}
结果