面试算法 输出数字矩形

输入N,输出一圈圈数字递增的正方形,如下

1 2 3

8 9 4

7 6 5


解答的重点就是对问题的分割

1.打印数组

2.初始化数组数据,(关键是找到通用的模式,让后用循环表达出来)

数据可以看成大正方形 套着小正方形,需要的只是初始位置的值,和边长


我用groovy写的,应该还是容易看懂的。

int[][] tArray = new int[2][2];
tArray[1][1] = 10;
println tArray[1][1]

def printSquare = { int[][] data, int power ->
    for (int y = 0; y < power; y++) {
        for (int x = 0; x < power; x++) {
            print data[x][y]
            print " "
        }
        println ""
    }
}


def initData = { int power ->
    int[][] data = new int[power][power];
    int elementValue = 1;
    int pointX = 0;
    int pointY = 0;
    int squareNum = power;

    while (squareNum > 1) {

        int sideNum = 0;
        while (sideNum < 4) {

            int sideElement = 0;
            while (sideElement < squareNum - 1) {
                println "sideEle ${sideElement} square ${squareNum} pointX ${pointX} pointY ${pointY} value ${elementValue}"
                data[pointX][pointY] = elementValue
                switch (sideNum) {
                    case 0:
                        pointX++
                        break;
                    case 1:
                        pointY++
                        break;
                    case 2:
                        pointX--
                        break;

                    case 3:
                        pointY--
                        break;

                }
                elementValue++;
                sideElement++;
            }
            sideNum++;
        }
        squareNum -= 2
        pointX++
        pointY++
    }

    if (squareNum == 1) {
        data[pointX][pointY] = elementValue;
    }

    data
}

printSquare(initData(4), 4)
printSquare(initData(5), 5)
printSquare(initData(6), 6)

输出省略debug log是:

sideEle 0 square 4 pointX 0 pointY 0 value 1

sideEle 1 square 4 pointX 1 pointY 0 value 2

sideEle 2 square 4 pointX 2 pointY 0 value 3

sideEle 0 square 4 pointX 3 pointY 0 value 4

sideEle 1 square 4 pointX 3 pointY 1 value 5

sideEle 2 square 4 pointX 3 pointY 2 value 6

sideEle 0 square 4 pointX 3 pointY 3 value 7

sideEle 1 square 4 pointX 2 pointY 3 value 8

sideEle 2 square 4 pointX 1 pointY 3 value 9

sideEle 0 square 4 pointX 0 pointY 3 value 10

sideEle 1 square 4 pointX 0 pointY 2 value 11

sideEle 2 square 4 pointX 0 pointY 1 value 12

sideEle 0 square 2 pointX 1 pointY 1 value 13

sideEle 0 square 2 pointX 2 pointY 1 value 14

sideEle 0 square 2 pointX 2 pointY 2 value 15

sideEle 0 square 2 pointX 1 pointY 2 value 16

1 2 3 4 

12 13 14 5 

11 16 15 6 

10 9 8 7 

sideEle 0 square 5 pointX 0 pointY 0 value 1

sideEle 1 square 5 pointX 1 pointY 0 value 2

sideEle 2 square 5 pointX 2 pointY 0 value 3

sideEle 3 square 5 pointX 3 pointY 0 value 4

sideEle 0 square 5 pointX 4 pointY 0 value 5

sideEle 1 square 5 pointX 4 pointY 1 value 6

sideEle 2 square 5 pointX 4 pointY 2 value 7

sideEle 3 square 5 pointX 4 pointY 3 value 8

sideEle 0 square 5 pointX 4 pointY 4 value 9

sideEle 1 square 5 pointX 3 pointY 4 value 10

sideEle 2 square 5 pointX 2 pointY 4 value 11

sideEle 3 square 5 pointX 1 pointY 4 value 12

sideEle 0 square 5 pointX 0 pointY 4 value 13

sideEle 1 square 5 pointX 0 pointY 3 value 14

sideEle 2 square 5 pointX 0 pointY 2 value 15

sideEle 3 square 5 pointX 0 pointY 1 value 16

sideEle 0 square 3 pointX 1 pointY 1 value 17

sideEle 1 square 3 pointX 2 pointY 1 value 18

sideEle 0 square 3 pointX 3 pointY 1 value 19

sideEle 1 square 3 pointX 3 pointY 2 value 20

sideEle 0 square 3 pointX 3 pointY 3 value 21

sideEle 1 square 3 pointX 2 pointY 3 value 22

sideEle 0 square 3 pointX 1 pointY 3 value 23

sideEle 1 square 3 pointX 1 pointY 2 value 24

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 

sideEle 0 square 6 pointX 0 pointY 0 value 1

sideEle 1 square 6 pointX 1 pointY 0 value 2

sideEle 2 square 6 pointX 2 pointY 0 value 3

sideEle 3 square 6 pointX 3 pointY 0 value 4

sideEle 4 square 6 pointX 4 pointY 0 value 5

sideEle 0 square 6 pointX 5 pointY 0 value 6

sideEle 1 square 6 pointX 5 pointY 1 value 7

sideEle 2 square 6 pointX 5 pointY 2 value 8

sideEle 3 square 6 pointX 5 pointY 3 value 9

sideEle 4 square 6 pointX 5 pointY 4 value 10

sideEle 0 square 6 pointX 5 pointY 5 value 11

sideEle 1 square 6 pointX 4 pointY 5 value 12

sideEle 2 square 6 pointX 3 pointY 5 value 13

sideEle 3 square 6 pointX 2 pointY 5 value 14

sideEle 4 square 6 pointX 1 pointY 5 value 15

sideEle 0 square 6 pointX 0 pointY 5 value 16

sideEle 1 square 6 pointX 0 pointY 4 value 17

sideEle 2 square 6 pointX 0 pointY 3 value 18

sideEle 3 square 6 pointX 0 pointY 2 value 19

sideEle 4 square 6 pointX 0 pointY 1 value 20

sideEle 0 square 4 pointX 1 pointY 1 value 21

sideEle 1 square 4 pointX 2 pointY 1 value 22

sideEle 2 square 4 pointX 3 pointY 1 value 23

sideEle 0 square 4 pointX 4 pointY 1 value 24

sideEle 1 square 4 pointX 4 pointY 2 value 25

sideEle 2 square 4 pointX 4 pointY 3 value 26

sideEle 0 square 4 pointX 4 pointY 4 value 27

sideEle 1 square 4 pointX 3 pointY 4 value 28

sideEle 2 square 4 pointX 2 pointY 4 value 29

sideEle 0 square 4 pointX 1 pointY 4 value 30

sideEle 1 square 4 pointX 1 pointY 3 value 31

sideEle 2 square 4 pointX 1 pointY 2 value 32

sideEle 0 square 2 pointX 2 pointY 2 value 33

sideEle 0 square 2 pointX 3 pointY 2 value 34

sideEle 0 square 2 pointX 3 pointY 3 value 35

sideEle 0 square 2 pointX 2 pointY 3 value 36

1 2 3 4 5 6 

20 21 22 23 24 7 

19 32 33 34 25 8 

18 31 36 35 26 9 

17 30 29 28 27 10 

16 15 14 13 12 11



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值