一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例 1:
输入:n = 2
输出:2
示例 2:
输入:n = 7
输出:21
示例 3:
输入:n = 0
输出:1
提示:
0 <= n <= 100
思路:
其实和 斐波那契数列 的思想是一样的,到达第n阶台阶的方法有 f(n-1) 和 f(n-2) 种方法。
从第 n-1 到达 第 n 阶就跳一次就够了,所以只有一种方法,而从第 n-2 到 第 n 阶可以一次跳2阶或者一次跳一阶跳2次,后者(一次跳一阶的方法)已经算在 从 n-1 到第 n 阶的方法里了。
所以从 n-2 到 第 n 阶只有唯一的跳2阶的方法了。
所以 f(n) = f(n-1)+f(n-2)
class Solution {
public:
int numWays(int n) {
/*int a=1,b=2; //这里注释掉的代码使用的是动态规划
int h;
for(int i=2;i<=n;++i){
h=a+b;
h%=1000000007;
a=b;
b=h;
}
return a;
*/
if(n<=1)
return 1;
int dp[n+1];
dp[1]=1;
dp[2]=2;
for(int i=3;i<=n;++i){
dp[i]=dp[i-1]+dp[i-2]; //这里使用数组来存储数值,避免多次重复运算
dp[i]%=1000000007;
}
return dp[n];
}
};