华为机考,蛇形矩阵,python

思路:
每行的数是有规律的,以n=4为例,第一行的第一个数是1,第二数是1+2=3,第三个数是3+3 =6,第四个数是6+4=10,总共加了n-1次分别是range(2,n+1),第二行的第一个数是1+1=2,第二个数是2+3=5,第三个是5+4=9,总共加了n-2次,分别是range(3,n+1)。第三行第一个数是第二行第一个数加2,2+2 =4,第二个数是4+4=8,总共加n-3次为range(4,n+1),第四行第一个数是第三行第一个数加3,4+3=7,第四行没有其他数因为n-4=0。泛化成数字表示,第i行的第j个数等于第i行的前一个数加list(range(i+1,n+1))[j]。dp[i][j]=dp[i][j-1]+list(range(i+1,n+1))[j]。我们需要每一行的第一个数,dp[i][1]=dp[i-1][i]+i-1。所以第一行的第一个数必须初始化为1。为了方便迭代,我们初始化一个dp[0][1]=1,第一行的第一个数是dp[1][1]=dp[0][1]+1-1=1。其他的每个数按迭代方式更新。代码如下:

while True:
    try:
        n = int(input())
        a = 1#初始化dp[0][1]
        for i in range(1,n+1):#更新第i行的后面的数
            list1 = []
            a = a + i - 1
            b = a
            list1.append(str(a))
            for i2 in range(i+1,n+1):#更新第i+1行的第一个数,为下一轮第i+1行的更新做准备
                b = b + i2
                list1.append(str(b))
            print(' '.join(list1))
    except:
        break
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值