LeetCode之Spiral Matrix II(Kotlin)

問題: 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

具體代碼實現能夠參考Githubui

相關文章
相關標籤/搜索