经典中得经典,记得当年高中数学得时候里面有一个小插曲,说的就是斐波那契数列。最经典得做法就是递归,即:
public class Solution {
public int Fibonacci(int n) {
if(n == 0)
return 0;
if(n == 1)
return 1;
return Fibonacci(n-2) + Fibonacci(n-1);
}
}
这个做法会重复计算很多得值,比如计算f6,需要计算f5和f4,计算机f5和f4都需要计算f3,这就造成了重复计算。所以解法如下:
class Solution {
public:
int Fibonacci(int n) {
if(n==1) return 1;
if(n==2) return 1;
long long fibNMinusOne=1;
long long fibNMinusTwo=1;
long long fibN=0;
for(int i=3; i<=n; i++){
fibN=fibNMinusOne+fibNMinusTwo;
fibNMinusOne=fibNMinusTwo;
fibNMinusTwo=fibN;
}
return fibN;
}
};