题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39
大致思路
- 最简单的思路就是递归啊,毕竟是经典的递归例子,但是结果还是超时了。哈哈~
- 超时是因为递归堆栈越来越大,而且每次计算的时候都会把前面计算过的再计算一遍。解决方案从低到高把这个数列构造出来就好了呀,用空间来交换时间。
代码
class Solution
{
public:
int Fibonacci(int n) {
if (n < 0)
return -1;
else if (n >= fibonaci_arry.size()){
if (fibonaci_arry.size() < 2){
fibonaci_arry.push_back(0);
fibonaci_arry.push_back(1);
}
for (int i = fibonaci_arry.size(); i <= n; i++){
fibonaci_arry.push_back(fibonaci_arry[i - 1] + fibonaci_arry[i - 2]);
}
}
return fibonaci_arry[n];
}
private:
vector<int> fibonaci_arry;
};
复制代码
总结
代码其实要中间的一部分就可以了,为什么还写成这样呢,因为考虑到实际的应用中,会多次使用这个接口。那么把已经算过的斐波那契数列存下来,后面继续调用的话,就直接返回,而不用每次都去计算。哈哈~哈