剑指offer:面试题10- II. 青蛙跳台阶问题

题目:青蛙跳台阶问题

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

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

示例 1:

输入:n = 2
输出:2

示例 2:

输入:n = 7
输出:21

提示:

0 <= n <= 100

解题:斐波那契数列问题

(1)如果只有1级台阶,那显然只有一种跳法;
(2)如果有2级台阶,就2种跳法(一种是分两次跳,每次跳1级;另一种是一次跳2级);
(3)如果有n级台阶 f(n),当 n>2 时,第一次跳的时候就有两种不同的选择。

第一次只跳1级,此时跳法数目等于后面剩下的 n-1级台阶跳法数目, f(n-1);
第一次跳2级,此时跳法数目等于后面剩下的 n-2 级台阶的跳法数目,f(n-2);
因此 f(n) = f(n-1) + f(n-2)。

方法一:递归

class Solution {
public:
    int numWays(int n) {
        if(n==1||n==0) return 1;
        return (numWays(n-1)+numWays(n-2))%1000000007;
    }
};

方法二:动态规划法

class Solution {
public:
    int numWays(int n) {
        if(n==0||n==1) return 1;
        int func1=1;
        int func2=1;
        for(int i=2;i<=n;i++) {
            int temp=f2;
            func2=(func1+func2)%1000000007;
            func1=temp;
        }   
        return func2;
    }
};

方法一、二与上一篇一致:https://blog.csdn.net/qq_41598072/article/details/104353770

发布了106 篇原创文章 · 获赞 113 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/qq_41598072/article/details/104356847
今日推荐