算法之小试牛刀——回型数组

本文介绍了如何解决回型数组的算法问题,分析了不同情况下填充的策略,包括奇数和偶数尺寸的情况,并展示了代码实现及输出结果。
摘要由CSDN通过智能技术生成

回型数组

今天偶然做到了这道稍稍有些难度的算法题,写一个回型数组,具体要求如下:
输入一个数字n,要求输出回型数组,例如:

//输入3
//输出   1 2 3
//       8 9 4
//       7 6 5
//输入4
//输出   1  2  3  4
//      10 11 12  5
//       9  8  7  6

相信大家从名字上就可以理解回型数组的形式,就是绕着中间去组成一个矩阵。这道题手写起来很容易,但是如何去编程实现还是有点难度的,因此在这里和大家分享下我的解法。

题目分析

看到题目的时候第一个想法就是按照我们人手写回型数组的方式从1一直写到n2,因此不难发现在完成数组的过程中需要依次用到向右向下向左向上四个操作,而后再进行循环,直到最终填补完成整个回型矩阵。
接下来还需要考虑几个问题:
1.假设向4个方向各填数一次,即右=>下=>左=>上各填数为一轮操作,则需要进行几轮;
2.每轮中,各个方向所填数的数量为多少;
3.当n为奇数和偶数时,有无不同。

这几个问题想来并不难得出结果,为了方便分析,我们在每一轮操作中,让每个方向填数的数量,均为需要填的矩阵的维度减1。
下图为3×3矩阵,我们进行第一轮操作时,每个方向填2个数,即向右填1,2,向下填3,4,向左填5,6,向上填7,8;在第二轮操作中,就剩下一个9.
n为奇数,3×3矩阵
下图为4×4矩阵,第一轮操作时每个方向填3个数,在进行第二轮操作时,向右填13,向下填14,向左填15,向右填16,从而完成回型数组。
n为偶数,4×4矩阵
相信大家在上述过程中,也发现了当n为奇数时,最里面一定会剩下一个数,也就是n2;而偶数的时候,最里面一定是个2×2矩阵。因此当n为奇数时,首先将中心的数填好,再完成周边的填写,而偶数时就正常填写矩阵即可。

代码展示

        //-----------------回型矩阵--------------------
        //初始化
        System.out.println
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值