第一题:
很经典的题,首先上个递归:
class Solution {
public:
int fib(int n) {
if(n==0) return 0;
else if(n==1) return 1;
return (fib(n-1)+fib(n-2))%1000000007;
}
};
当然超时,再上个循环的:
class Solution {
public:
int fib(int n) {
if(n==0) return 0;
else if(n==1) return 1;
int a=0,b=1,ans;
for(int i=2;i<=n;++i)
{
ans=(a+b)%1000000007;
a=b;
b=ans;
}
return ans;
}
};
结果如下所示:
第二题:
两者都是一个问题,不过青蛙跳台阶的初始条件不同而已
代码如下所示:
class Solution {
public:
int numWays(int n) {
if(n==1||n==0) return 1;
int a=1,b=1,ans=1;
for(int i=2;i<=n;++i)
{
a=b;
b=ans;
ans=(a+b)%1000000007;
}
return ans;
}
};
结果如下所示: