给定一个正整数 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 } }
|