美文网首页
顺时针打印数组

顺时针打印数组

作者: MIRROR1217 | 来源:发表于2022-08-19 20:10 被阅读0次

    之前面试的时候这样一道算法:
    给你一个正整数N,且N > 0,得到一个从1到N*N大小的数组,按照顺时针打印它
    eg:n = 3,arr=[1,2,3,4,5,6,7,8,9]
    期望结果:
    [1, 2, 3]
    [8, 9, 4]
    [7, 6, 5]
    当时有个思路,用三位数组做,arr[x][y]=arr[i],控制x和y的边界条件,但是时间比较紧张,没有完成,今天抽时间完成它,代码如下:

    class Test1 {
    
    
        //   1   2   3    4    5
        //  16   17  18   19   6
        //  15   24  25   20   7
        //  14   23  22   21   8
        //  13   12  11   10   9
    
        companion object {
    
    
            @JvmStatic
            fun main(args: Array<String>) {
                println("Test")
                val num = 3
                val arr = getArrNum(num)
                println("arr = "+ arr.contentToString())
                sort(arr, num)
            }
    
            fun sort(array: IntArray,num: Int) {
                val arrs = Array(num){IntArray(num)}
                var x = 0
                var y = 0
                var index = 0
                var right = true
                var down = false
                var left = false
                var up = false
                var len = 1
                while (index < num * num && x < num && y < num && x >= 0 && y >= 0) {
    
    //                println("x = $x,y = $y")
                    arrs[y][x] = array[index]
                    if (right) {
                        x += 1
                        if (x == (num - len)) {
                            right = false
                            down = true
                        }
                    } else if(down) {
                        y += 1
                        if (y == (num - len)) {
                            down = false
                            left = true
                        }
                    } else if (left) {
                        x -= 1
                        if (x == (len - 1)) {
                            left = false
                            up = true
                        }
                    } else if (up) {
                        y -= 1
                        if (y == len) {
                            up = false
                            right = true
                            len++
                        }
                    }
    
                    index++
                }
    
    //            arrs[0][0] = 1
    //            arrs[1][0] = 2
                for (arr in arrs) {
                    println(arr.contentToString())
                }
            }
    
            fun getArrNum(num:Int):IntArray {
                val length = num.times(num)
                val arr = IntArray(length)
                for(i in 0..length) {
                    if (i != length) {
                        arr[i] = i+1
                    }
                }
                return arr
            }
        }
    }
    

    结果:


    image.png

    相关文章

      网友评论

          本文标题:顺时针打印数组

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