美文网首页工作生活
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