1.青蛙跳台阶
f3=f2+f1类型
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例 1:
输入:n = 2
输出:2
示例 2:
输入:n = 7
输出:21
示例 3:
输入:n = 0
输出:1
动态规划:
原理: 以斐波那契数列性质 f(n + 1) = f(n) + f(n - 1)f(n+1)=f(n)+f(n−1) 为转移方程。
从计算效率、空间复杂度上看,动态规划是本题的最佳解法。
//我的解法 类似于斐波那契数列
class Solution {
public:
//动态规划 求循环次数
int numWays(int n) {
int f3,f2,f1;
if(n==0)
return 1;
if(n==1||n==2)
return n;
//f3=f2+f1;
f1=1; //n=0
f2=1; //n=1
for(int i=1;i<n;i++)
{
f3=(f2+f1)%1000000007;
f1=f2;
f2=f3;
}
return f3;
}
};