59. 螺旋矩阵 II
题目描述:给你一个正整数
n
,生成一个包含1
到n2
所有元素,且元素按顺时针顺序螺旋排列的n x n
正方形矩阵matrix
。示例 1:
输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:
输入:n = 1 输出:[[1]]提示:
1 <= n <= 20
代码思想:
定义一个变量 circle
表示需要遍历的圈数,一个变量 num
来记录当前需要填入的数字,从 1 开始递增。遍 历每一个圈,对于每个圈:
- 向右遍历上侧,填入数字
num
到matrix[i][k]
。 - 向下遍历右侧,填入数字
num
到matrix[k][n-i-1]
。 - 向左遍历下侧,填入数字
num
到matrix[n-i-1][k]
。 - 向上遍历左侧,填入数字
num
到matrix[k][i]
。
关键点在于利用圈的概念来遍历螺旋矩阵。对于每个圈,需要遍历上、右、下、左四条边,并且每个圈的起始和结束位置都不一样。通过控制循环条件,可以依次填入从 1 到 n^2
的数字,最终形成一个螺旋矩阵。
java">class Solution {public int[][] generateMatrix(int n) {int num = 1;int circle = (n + 1) / 2;int[][] matrix = new int[n][n];for (int i = 0; i < circle; i++) {for (int k = i; k < n - i - 1; k++) {matrix[i][k] = num++;}for (int k = i; k < n - i - 1; k++) {matrix[k][n - i - 1] = num++;}for (int k = n - i - 1; k >= i; k--) {matrix[n - i - 1][k] = num++;}for (int k = n - i - 2; k > i; k--) {matrix[k][i] = num++;}}return matrix;}
}