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

一、题目:

  一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

输入:n = 2
输出:2
示例 2:

输入:n = 7
输出:21
示例 3:

输入:n = 0
输出:1
提示:

0 <= n <= 100

 

二、分析与代码

  通过分析,找递推公式:dp[i]表示上到第i层楼梯有多少种解法,dp[0] = 1; dp[1] = 1; dp[2] = 2; dp[3] = 3; dp[4] = 5; 

可以得到递推公式为dp[i] = dp[i-1] + dp[i-2],题型和“斐波那契数”相同,参考博客:剑指 Offer 10- I. 斐波那契数列 - 湘summer - 博客园 (cnblogs.com)

 

1.动态规划:

 

复制代码
class Solution {
    public int numWays(int n) {
        int[] dp = new int[101];
        dp[0]=1;
        dp[1]=1;
        dp[2]=2;
        for(int i=2;i<=n;i++){
            dp[i] = (dp[i-1]+dp[i-2])%1000000007;
        }
        return dp[n];
    }
}
复制代码

 

2.滚动数组:

复制代码
class Solution {
    public int numWays(int n) {
        if(n==0||n==1)
            return 1;
        int p=1,q=1,t=0;
        for(int i=2;i<=n;i++){
            t=(p+q)%1000000007;
            p=q;
            q=t;
        }
        return t;
    }
}
复制代码

 

posted @   湘summer  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示