剑指 Offer 10- II. 青蛙跳台阶问题

在这里插入图片描述

class Solution {
public:
    int numWays(int n) {
        // 五部曲
        // 1. 确定dp数组以及下标含义
        //    dp[i]   跳上第i层有多少跳法
        //    dp[i-1] 跳上第i-1层有多少跳法
        //    dp[i-2] 跳上第i-2层有多少跳法

        // 2. 确定递推公式
        //    第i层可以由[i-1]层跳一步或者[i-2]层跳两步到来
        //    因此dp[i] = dp[i-1] + dp[i-2]  (i>=2时生效)

        // 3. 确定数值初值
        //    dp[0] = 1, dp[1] = 1

        // 4. 确定遍历顺序
        //    for(int i=2; i<=n; i++)

        // 5. 举例验证
        //    n = 0 or 1 , return 1
        //    n = 2,  dp[2] = dp[1] + dp[0] = 2   符合!
        //    n = 3,  dp[3] = d[2] + dp[1] = 3    符合!  
        //    ....

        // 可以确定,本质上就是斐波那契,只不过初始值不同
        if(n<=1)
            return 1;

        int dp[2];
        dp[0] = 1;
        dp[1] = 1;

        const int MOD = 1000000007;
        for(int i=2; i<=n; i++){
            int sum = (dp[1] + dp[0]) % MOD;
            dp[0] = dp[1];
            dp[1] = sum;
        }

        return dp[1];

    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值