题目
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例:
输入:n = 7
输出:21
示例:
输入:n = 0
输出:1
示例:
输入:n = 2
输出:2
这题本质还是斐波那契数列,初始值为
n=0===>1
n=1===>1
n=2===>2 (1,1,或2)
那么我们就知道 所以循环起点应该是从1开始,因为1+2=3
n=3===>3(1,1,1或者2,1或者1,2)
n=4===>4 (1,1,1,1 或者2,1,1 或者1,2,1或者1,1,2 或者2,2)
python版本
class Solution(object):
def numWays(self,n):
a,b=1,2
if(n==0) return 1
for _ in range(1,n):
a,b=b,a+b
return a%1000000007
C++版本的时候
我尝试这么写
class Solution {
public:
int numWays(int n) {
vector<int> mp;
if(n==0) mp.push_back(1);
else if(n==1) mp.push_back(1);
else if(n==2) mp.push_back(2);
else{
mp.push_back((mp[n-1]+mp[n-2])%1000000007);
}
return mp[n];
}
};
但是报内存泄漏,这个我目前还未能解决
然后就换了另一种写法
class Solution {
public:
int numWays(int n) {
if(n==0) return 1;
if(n<=2) return n;
int a=1,b=2,c=0; //a保存f(n-2) b保存f(n-1) c保存f(n)
for(int i=3;i<=n;++i){
c=(a+b)%1000000007;
a=b;
b=c;
}
return c;
}
};