原题:
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
class Solution {
public:
int numWays(int n) {
int p = 0, q = 0, r = 1;//初始化p为0 q为f(0)==0 r为f(1)==1
//p q r分别指f(x - 2) f(x - 1) f(x)
for (int i = 1; i <= n; ++i) {
p = q;
q = r;
r = (p + q) % 1000000007;
}
return r;
}
};
扩展题:
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。
解题思路
对于方法一中的:f[n] = f[n-1] + f[n-2] + ... + f[0]
那么f[n-1] 为多少呢?
f[n-1] = f[n-2] + f[n-3] + ... + f[0]
所以一合并,f[n] = 2*f[n-1],初始条件f[0] = f[1] = 1
所以可以采用递归,记忆化递