剑指 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 @ 2022-08-24 21:41  湘summer  阅读(41)  评论(0编辑  收藏  举报