問題: Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.git
Input: 3
Output:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
複製代碼
方法: 步進有四種方式,分別是沿着列正向1,沿着列反向2,沿着行正向3和沿着行反向4,循環過程是1->3->2->4->1,切換步進方式的條件是遇到邊界,判斷邊界的條件是數組越界和已經賦值,步進n*n次後退出循環,輸出的即爲最終結果。github
具體實現:數組
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))
}
複製代碼
有問題隨時溝通bash