剑指 Offer 10- I. 斐波那契数列
法一: 递归
当数据量较大时会超时
class Solution {
public:
int fib(int n) {
if(n == 0)
return 0;
if(n == 1)
return 1;
long long num = 0;
num = fib(n-1) + fib(n-2);
if(num > 1000000007)
num %= 1000000007;
return num;
}
};
法二:数组
class Solution {
public:
int fib(int n) {
vector<long> nums;
nums.push_back(0);
nums.push_back(1);
for(int i = 2; i <= n; i++) {
nums.push_back(nums[i-1] + nums[i-2]);
if(nums[i] > 1000000007)
nums[i] %= 1000000007;
}
return nums[n];
}
};
若用一个动态数组 ,时间复杂度为O(N)
//注意,当n=0,1时,向nums的存放值时,必须用push_back来添加,否则是不存在那块区域的,在没有规定大小的时候 如下所示就不对
nums[0] = 0;
nums[1] = 1;