leetcode_59. 螺旋矩阵 II_java
59. 螺旋矩阵 IIhttps://leetcode.cn/problems/spiral-matrix-ii/
1.题目
给你一个正整数 n
,生成一个包含 1
到所有元素,且元素按顺时针顺序螺旋排列的
n×n
正方形矩阵 matrix
。
示例 1:
输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1 输出:[[1]]
提示:
1 <= n <= 20
2.题解
class Solution {
public int[][] generateMatrix(int n) {
// 创建一个 n x n 的二维数组,用于存储生成的矩阵
int[][] nums = new int[n][n];
// 初始化起始位置和计数器
int startX = 0, startY = 0;
int count = 1; // 用于填充矩阵的数字,初始为 1
// 控制循环的层数,每一层是一个外圈的数字填充
int loop = 1;
// offset 用于控制每次填充的边界
int offset = 1;
// 循环控制每一层的填充,直到达到矩阵的中心
int i, j;
while (loop <= n / 2) {
// 填充当前层的上边,左到右
for (j = startY; j < n - offset; j++) {
nums[startX][j] = count++; // 从左到右填充
}
// 填充当前层的右边,顶到底
for (i = startX; i < n - offset; i++) {
nums[i][j] = count++; // 从上到下填充
}
// 填充当前层的下边,右到左
for (; j > startY; j--) {
nums[i][j] = count++; // 从右到左填充
}
// 填充当前层的左边,底到顶
for (; i > startX; i--) {
nums[i][j] = count++; // 从下到上填充
}
// 移动到下一层,开始下一个边界
loop++;
startX++;
startY++;
offset++;
}
// 如果 n 是奇数,最后会剩下一个中心点需要单独填充
if (n % 2 != 0) {
nums[startX][startY] = count; // 填充中心位置
}
// 返回最终填充的矩阵
return nums;
}
}