LeetCode: 119.杨辉三角II

 

需要注意的是,输入3,其实想得到第4行。

思路有四个:

1. 最简单的就是用上一层的结果求下一层,所以为了得到第k行,要从第1层开始慢慢算。

2. 使用组合公式算。杨辉三角的位置可以通过C^i_N的方式算,N是行数,i是第N行的第i的位置。

3. 上一层第i和i+1的元素相加,得到下一层第i+2的元素,所以,可以利用在上一层的开头insert 0,使用diff,连续向后加得到下一层。

4. 由组合公式可以推出相邻元素呈现的倍数。而且计算量比直接排列组合小,因为没有重复运算。

 

我仅介绍第2和3种方法。第一种等于上一题的解法。

第二种如下

class Solution:
    def getRow(self, rowIndex: int) -> List[int]:
        def c_n_i(n, i):
            res = 1
            for j in range(1, i+1):
                res *= (n - i + j) / j
            return res
        res = [1] * (rowIndex + 1)
        for i in range(1, rowIndex):
            res[i] = round(c_n_i(rowIndex, i))
        return res

第三种:

        res = [1]
        for i in range(1, rowIndex + 1):
            res.insert(0, 0)
            for j in range(i):
                res[j] = res[j] + res[j+1]
        return res

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值