斐波那契额数列。
算是最简单的了。
第一种:
递归
class Solution {
public:
int fib(int n) {
if(n<2){
//这一步真是巧妙,我还一直担心,觉得n==0和n==1还要分开讨论,
//结果,直接return n;什么心也不用操。
return n;
}else{
return fib(n-1)+fib(n-2);
}
}
};
显然,时间复杂度大的惊人。
动态规划思想
确定base,也就是斐波那契数列前两个值:0和1。
然后进行记录。
接着依次放入下一项,直至我们需要的哪一项。
class Solution {
public:
int fib(int n) {
//用作记录的数组
vector<int> v;
//基准值
v.push_back(0);
v.push_back(1);
//公式
//v[i]=v[i-1]+v[i-2];
for(int i=2;i<=n;i++){
v.push_back(v[i-1]+v[i-2]);
}
return v[n];
}
};