leetcode119

119. 杨辉三角 II

给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 行。

在杨辉三角中,每个数是它左上方和右上方的数的和。

示例:

输入: 3
输出: [1,3,3,1]

我思路:

1.从第一行生成到第k行(下标k)在输出

2.递归 ,每个元素调用L[i]=L[i-1][j-1]+L[i-1][j]

3.由于每行都是对称的,所以生成一半就可以了

处理边元素:若不存在(下标溢出则结束这边的递回)

个数:L[i]有i+1个元素

class Solution(object):
    def getRow(self, rowIndex):
        L=[]
        for j in range((rowIndex)/2+1):
            L.append(self.theL(rowIndex,j))
        for j in range((rowIndex-1)/2,-1,-1):#从后向前取,不取中点
            L.append(L[j])
        return L
        
    def theL(self,i,j):
        #停止递归的条件
        #当下标在边缘值,直接用return 截断,则不会产生下标溢出
        if i==j==0:
            return 1
        if i == 0:
            return 0 
        if j==0:
            return 1
        if j==i:
            return 1
        return self.theL(i-1,j-1)+self.theL(i-1,j)

超时

他人:

1.逐行求出来

class Solution(object):
    def getRow(self, rowIndex):
        
        #因为不用保存之前的行,所以可以直接在当前行修改
        cur=[]
        for i in range(rowIndex+1):
            cur.append(1)
            #复制过来后,从倒数第二个元素开始后向前更新
            for j in range(i-1,0,-1):
                cur[j]=cur[j]+cur[j-1]
        return cur

2.别人的递归

class Solution(object):
    def getRow(self, rowIndex):
        L=[]
        if rowIndex==0:
            return [1]
        parent=self.getRow(rowIndex-1)
        #已经拿到上一行数据
        L.append(1)
        for j in range(1,rowIndex):#从第一个到倒数第二个,逐个生成本行各元素            
            result= parent[j]+parent[j-1]
            L.append(result)
        L.append(1)
        return L

区别:我的在递归生成每个元素(横向和纵向都要伸展),他的是递归一行一行的生成

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值