0%

LeetCode.螺旋矩阵II

给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

  • 示例:
    输入: 3
    输出:
    [
     [ 1, 2, 3 ],
     [ 8, 9, 4 ],
     [ 7, 6, 5 ]
    ]

解法:

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
object GenerateMatrix {

def main(args: Array[String]): Unit = {
generateMatrix(1).foreach(a => println(util.Arrays.toString(a)))
generateMatrix(2).foreach(a => println(util.Arrays.toString(a)))
generateMatrix(3).foreach(a => println(util.Arrays.toString(a)))
generateMatrix(4).foreach(a => println(util.Arrays.toString(a)))
generateMatrix(5).foreach(a => println(util.Arrays.toString(a)))
generateMatrix(6).foreach(a => println(util.Arrays.toString(a)))
}

def generateMatrix(n: Int): Array[Array[Int]] = {
val matrix = new Array[Array[Int]](n)
for (i <- 0 until n) {
matrix(i) = new Array[Int](n)
for (j <- 0 until n) {
matrix(i)(j) = 0
}
}

var l = 0
var b = n - 1
var c = 1

while (l < b) {
for (i <- l to b) {
matrix(l)(i) = c
c += 1
}

for (i <- l + 1 to b) {
matrix(i)(b) = c
c += 1
}
for (i <- b - 1 to l by -1) {
matrix(b)(i) = c
c += 1
}

for (i <- b - 1 to l + 1 by -1) {
matrix(i)(l) = c
c += 1
}

l += 1
b -= 1
}

if (n % 2 == 1) matrix(n / 2)(n / 2) = n * n
matrix
}
}