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

顺时针打印数组

作者: 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

相关文章

  • 《剑指offer》(十九)-顺时针打印矩阵(java)

    顺时针打印矩阵 考点:数组 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入...

  • 【python】二维数组的旋转遍历?

    题目:假定有一个二维数组,要求将数组中的元素以顺时针的旋转方式打印出来。实现一个函数,使得数组的元素能按照顺时针方...

  • 顺时针打印数组

    之前面试的时候这样一道算法:给你一个正整数N,且N > 0,得到一个从1到N*N大小的数组,按照顺时针打印它eg:...

  • 顺时针打印矩阵

    按照顺时针的顺序打印一个二维数组每次打印之前我们要记录开始的startX,endX,startY,endY;每次打...

  • JavaScript - 顺时针打印数组

    顺时针打印一个M*N的矩阵,起始为1。例子:m = 6 ,n = 5[ [ 1, 2, 3, 4, 5 ],[ 1...

  • 算法-数组(二)

    数组系列的第二篇文章。 调整数组顺序,使奇数位于偶数前面 顺时针打印矩阵 查找数组中出现次数大于一半的数字 1.调...

  • 左程云-数组问题

    1、打印转圈数组 思路:按圈打印,并判断圈的四条边是否存在 2、将正方形矩阵顺时针转动90度 思路:不同于书中的做...

  • 算法-29.顺时针打印矩阵

    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。思路:与前面打印回环数组的算法类似。即定义方向,通过...

  • 剑指offer——顺时针打印矩阵

    剑指offer——顺时针打印矩阵 题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,...

  • 【不熟练】知识迁移能力-顺时针打印矩阵

    顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: ...

网友评论

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

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