1. 问题描述:
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix-ii
2. 思路分析:
① 其实题目还是比较好理解的,我们可以按照我们平常的思维来模拟整个数组元素的生成过程,可以知道一开始的时候是往右边生成的,第二个是下边生成元素,第三个是往左边生成元素,第四个是往上边生成元素,所以可以使用四个while循环来生成一个框对应的边,可以发现能够生成当前数组元素的条件是当前的元素是为零的,表示之前是没有被填充过并且当前的位置没有超出数组的边界,所以四个while循环的条件为当前位置未超过数组边界而且当前数组元素为零,填完一个框之后那么对于第二次填充也是一样的所以在最外面可以套一层while循环,当元素个数还没有生成循环的时候执行最外层的循环即可,循环结束那么所有的元素就已经生成了
② 整个的过程还是比较好理解的,判断一下边界与对应的条件即可完成,整体的代码难度不大,我在领扣中也写了自己的题解
3. 代码如下
import java.util.Scanner;
public class Solution {
public int[][] generateMatrix(int n) {
if (n == 0) return null;
int arr[][] = new int[n][n];
int count = 2;
int x = 0, y = 0;
arr[0][0] = 1;
while (count <= n * n){
while (y + 1 < n && arr[x][y + 1] == 0){
arr[x][y + 1] = count++;
++y;
}
while (x + 1 < n && arr[x + 1][y] == 0){
arr[x + 1][y] = count++;
++x;
}
while (y - 1 >= 0 && arr[x][y - 1] == 0){
arr[x][y - 1] = count++;
--y;
}
while (x - 1 >= 0 && arr[x - 1][y] == 0){
arr[x - 1][y] = count++;
--x;
}
}
return arr;
}
}