题目:青蛙跳台阶问题
一只青蛙一次可以跳上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