递推求组合数

刷题的时候在leetcode上碰到了一个求组合数的问题,很蠢地去用阶层求分子分母然后做除法,结果跑了一大半的用例之后就溢出了,于是了解到了有组合数公式的递推方法,公式如下
这是直接截的图,第一个范围n>=0是成立的,编程实现的时候,第二个范围注意了就OK
这里写图片描述

题目如下:
这里写图片描述
AC代码:

class Solution {
public:

    vector<int> getRow(int rowIndex) {

        vector<int> arr(rowIndex+1, 0);;
        arr[0]=1;//保证左边第一个值为1,相当于C(n,0)
        for(int i=1;i<=rowIndex;i++)//向右开始递归,C(i,x)就相当于公式中的C(n,k)
        {
            arr[i]=1;//相当于C(n,n)
            //注意范围0<k<n,这里j就相当于k
            for(int j=i-1;j>=1;j--)//使用滚动数组将空间复杂度降到O(n),每次递归用的上一次的值,注意要从后往前遍历,因为要用前面的值参与递归
                arr[j]=arr[j-1]+arr[j];//C(n,k)=C(n-1,k-1)+C(n-1,k)
        }
        return arr;
    }
};
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值