59. 螺旋矩阵 II
LeetCode59. Spiral Matrix II
题目描述
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
Java 实现
import java.util.Scanner;
public class Solution {
public static int[][] generateMatrix(int n) {
int[][] res = new int[n][n];
int m = 1;
/* 四个循环按不同的方向进行 */
for (int i = 0; i < n / 2; i++) {
for (int j = i; j < n - i; j++) {
res[i][j] = m++;
}
for (int j = i + 1; j < n - i; j++) {
res[j][n - i - 1] = m++;
}
for (int j = n - i - 2; j >= i; j--) {
res[n - i - 1][j] = m++;
}
for (int j = n - i - 2; j > i; j--) {
res[j][i] = m++;
}
}
/* 如果是单数的话,要加上最大的那个数放在中间 */
if (1 == n % 2) {
res[n / 2][n / 2] = m;
}
return res;
}
public static void show(int[][] res) {
for (int[] x : res) {
for (int y : x) {
System.out.printf("%4d", y);
}
System.out.println();
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[][] res = generateMatrix(n);
show(res);
}
}
运行结果
输入 1
1
输入 2
1 2
4 3
输入 3
1 2 3
8 9 4
7 6 5
输入 4
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
输入 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
输入 6
1 2 3 4 5 6
20 21 22 23 24 7
19 32 33 34 25 8
18 31 36 35 26 9
17 30 29 28 27 10
16 15 14 13 12 11
参考资料