问题:
Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
Input: 3
Output:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
方法:
步进有四种方式,分别是沿着列正向1,沿着列反向2,沿着行正向3和沿着行反向4,循环过程是1->3->2->4->1,切换步进方式的条件是遇到边界,判断边界的条件是数组越界和已经赋值,步进n*n次后退出循环,输出的即为最终结果。
具体实现:
class SpiralMatrixII {
fun generateMatrix(n: Int): Array<IntArray> {
val result = Array(n, { IntArray(n, { 0 }) })
var i = 0
var j = 0
var dj = 1
var di = 0
var value = 1
while (value <= n*n) {
result[i][j] = value
value++
j+=dj
i+=di
if (j >= n || i >= n || j < 0 || i <0 || result[i][j] != 0 ) {
j-=dj
i-=di
if (dj == 1) {
dj = 0
di = 1
} else if (dj == -1) {
dj = 0
di = -1
} else if (di == 1) {
dj = -1
di = 0
} else if (di == -1) {
dj = 1
di = 0
}
j+=dj
i+=di
}
}
return result
}
}
fun main(args: Array<String>) {
val spiralMatrixII = SpiralMatrixII()
CommonUtils.print2DIntArray(spiralMatrixII.generateMatrix(3))
}
有问题随时沟通
网友评论