2021-11-28 杨辉三角(Python)

杨辉三角

题目描述:

给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。
在这里插入图片描述
在这里插入图片描述

我的答案

class Solution:
    def generate(self, numRows: int) -> List[List[int]]:
        #定义listRow接收最后的结果
        listrow = []
        #先定义一个初始的数组
        list = [0,1,0]
        #before等于[0],使得每次产生的数组首个元素都等于0
        befor = [0]
        #如果传入的层数是0,直接返回[]
        if numRows == 0:
            return listrow
        #控制层数
        for i in range(numRows):
            #接收listRow的第一个元素,以后每轮循环也加进来
            listrow.append(list[1:-1])
            #控制每一个元素的长度
            for j in range(len(list) -1):
                #将上一轮产生的数组的两两相加的元素存入befor
                befor.append(list[j] + list[j + 1])
                #print(list)
            #数组最后补0,增加数组长度
            befor.append(0)
            #将上一次循环得到数组循环赋给list,进入下一次循环
            list = befor
            #将before恢复出厂设置
            befor= [0]
        return listrow

执行结果:通过
执行用时:32 ms, 在所有 Python3 提交中击败了64.60%的用户
内存消耗:14.9 MB, 在所有 Python3 提交中击败了83.59%的用户
通过测试用例:14 / 14

大佬答案:
大佬的速度和我的差不多,但是思路更清晰一些
大佬思路:
在杨辉三角中,每个数是它左上方和右上方的数的和。
题目给的这一句话提示就够了。稍微麻烦的是要考虑头尾为1的情况
那不如根据行创建对应全1的列表,然后在根据非边缘的值进行公式套用

class Solution:
    def generate(self, numRows: int) -> List[List[int]]:
        #定义ret接收最后产生的数组
        ret = []
        #从1到numRows,控制层数
        for i in range(1, numRows + 1):
        	#创建一个有i个全为1的数组
            tmp = [1 for _ in range(i)]
            #循环控制每层的数量
            for j in range(1, len(tmp) - 1):
                # 这里注意是 i - 2
                #让tmp = 上一层的数组的两数之和
                #i - 2的原因是因为i是从1开始的,数组是下标从零开始,
				#当i为1的时候并没有进入这一轮for循环
                tmp[j] = ret[i - 2][j - 1] + ret[i - 2][j]
            ret.append(tmp)
        return ret

<变量> for i in range(N)“的作用是”<变量> 随着i对range的遍历而产生N-1个这个<变量>
如下举例:
tmp = [[] for i in range(4)]
执行结果为:使 []循环产生4次。即在输入

tmp = [[] for i in range(4)]

tmp后输出为:[[], [], [], []]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值