合肥网站建设步骤品牌营销理论
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;}
}