超经典算法----螺旋输出数组内容

震惊某程序员竟然这样实现了螺旋数组


要求:
输入样例:
4
输出样例:

10987
11216
12345
13141516

思路:

  1. 事先定义的一个基础的2的矩阵

  2. n=2时的矩阵

  3. 当n为2时

  4. n=3时的矩阵

  5. 当n为3时

  6. 通过对比 我们可以发现 n=3时 只需要补充一行 和剩下两列的两个数

  7. n=4时的矩阵

  8. n=4时

  9. 通过和上面n=3的矩阵相比 n=4时 只需要补充最下面一列和然后对每个列表插入一个数

  10. 最后,根据输入的n,用循环来确定补全的次数

代码如下:

def jishu(l, n): #奇数情况下
    a = []
    lineMax = n * n # 计算出最大值
    for i in range(n): # 生成奇数的第一列
        a.append(lineMax)
        lineMax -= 1
    l.insert(0, a) # 插入到之前的列表中
    for i in range(1, len(l)): #补全剩余的数
        l[i].append(lineMax)
        lineMax -= 1
    return l


def oushu(l, n): # 偶数情况下
    a = []
    lineMax = n * n
    for i in range(n): # 补全最后一列
        a.append(lineMax)
        lineMax -= 1
    l.append(a[::-1])
    for i in range(len(l) - 2, -1, -1): # 补全剩下的数
        l[i].insert(0, lineMax)
        lineMax -= 1
    return l


if __name__ == '__main__':
    n = int(input())
    l = [[2, 1], [3, 4]] # 事先定义的一个基础的2的列表
    if n >= 3:
        for i in range(3, n + 1):
            if i % 2 == 1:
                l = jishu(l, i)
            if i % 2 == 0:
                l = oushu(l, i)

    for i in l:
        for j in i:
            print('%-4d' % j, end=" ")
        print()

'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

China@V

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值