【编程题】生成蛇形矩阵

本篇博文主要想继上一篇博文,记录一下腾讯复试时面试官出的另一道编程题,要求共享桌面、编辑器编写,不能编译调试,零错误,40 分钟内。

题目:编写一个算法,给定一个整型数字 n,能够生成一个 n*n 维的蛇形矩阵。

例如:

输入:
4

输出:
1   2   6   7
3   5   8   13
4   9   12 14
10 11 15 16

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
public class Solution {
// 防止实例化
private Solution() {}

// 生成蛇形矩阵
public static int[][] generateMatrix(int n) {
// 特殊输入的检查
if (n < 1)
throw new RuntimeException("非法输入");

int[][] result = new int[n][n];

int direction = 1; // 方向变量:1右,2下,3左下,4右上
int count = 1; // 计数器
int row = 0; // 行
int column = 0; // 列
while (count <= (n * n)) {
result[row][column] = count++;
switch (direction) {
case 1:
column++;
if (row == 0)
direction = 3;
else
direction = 4;
break;
case 2:
row++;
if (column == 0)
direction = 4;
else
direction = 3;
break;
case 3:
row++;
column--;
if (column == 0 && row != n - 1)
direction = 2;
else if (row == n - 1)
direction = 1;
else
direction = 3;
break;
case 4:
row--;
column++;
if (row == 0 && column != n - 1)
direction = 1;
else if (column == n - 1)
direction = 2;
else
direction = 4;
break;
}
}

return result;
}

// 测试
public static void main(String[] args) {
// int n = 0;
// int n = 1;
// int n = 5;
int n = 6;
int[][] m = generateMatrix(n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
System.out.print(m[i][j] + "\t");
System.out.println();
}
}
}