美文网首页工作生活
LeetCode之Spiral Matrix II(Kotlin

LeetCode之Spiral Matrix II(Kotlin

作者: 糕冷羊 | 来源:发表于2019-07-02 18:55 被阅读0次

问题:
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))
}

有问题随时沟通

具体代码实现可以参考Github

相关文章

网友评论

    本文标题:LeetCode之Spiral Matrix II(Kotlin

    本文链接:https://www.haomeiwen.com/subject/tbvthctx.html