LeeCode 62 组合数打表

题意

传送门 LeeCode 62. 不同路径

题解

路径长度为 m + n − 2 m+n-2 m+n2,纵向 m − 1 m-1 m1 个,横向 n − 1 n-1 n1 个,则路径总数为 C m + n − 2 n − 1 C_{m+n-2}^{n-1} Cm+n2n1

组合数打表即可,递推式可理解为对于 C m n C_{m}^{n} Cmn,最后一个可以取或不取

C m n = C m − 1 n − 1 + C m − 1 n C_{m}^{n}=C_{m-1}^{n-1}+C_{m-1}^{n} Cmn=Cm1n1+Cm1n

class Solution {
private:
    static const int MAX_N = 100;
    static const int mod = 2e9;
    long long dp[MAX_N * 2][MAX_N];
    void init(){
        for(int m = 0; m < MAX_N * 2; m++) dp[m][0] = 1;
        for(int m = 1; m < MAX_N * 2; m++){
            for(int n = 1; n < MAX_N; n++){
                dp[m][n] = (dp[m - 1][n - 1] + dp[m - 1][n]) % mod;
            }
        }
    }
public:
    int uniquePaths(int m, int n) {
        init();
        return dp[m + n - 2][n - 1];
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值