这里要注意当n取很大的数字时,如果不提取进行取模,仅仅对结果进行取模的话,很有可能会超过整数的表达范围,longlong也不行。
此外,如果按照正常递归的写法,时间复杂度是指数,所以要用O(n)的写法线性扫描,否则肯定会超时。
class Solution {
public:
int fib(int n)
{
if(n==0)
return 0;
if(n==1)
return 1;
long long nums[n+1];
nums[0]=0;
nums[1]=1;
for(int i=2;i<n+1;i++)
{
nums[i]=(nums[i-1]+nums[i-2])%(1000000007);
}
return nums[n];
}
};