下面是时间复杂度为O(n)的解答
static int Fbn(int n) {
int[] a = new int[n];
a[0] = 1;
a[1] = 1;
for (int i = 2; i < n; i++)
{
a[i] = a[i - 1] + a[i - 2];
}
return a[n - 1];
}
import java.util.Scanner;
public class Test {
public static void main(String [] args) {
Scanner sc=new Scanner(System.in);
int n = sc.nextInt();
int [] a = new int[n];
a [0] = 1;
a [1] = 1;
for (int i = 2; i < n; i++) {
a [i] = a [i-1] + a [i-2];
}
System.out.println(a[n-1]);
}
}
//时间复杂度为O(n)的java写法
** 因为斐波那数列没有0 所以最后返回的要n-1来表示**
下面是时间复杂度为O(1)的方法
class Solution {
public:
int Fib(int n) {
const double s = sqrt(5);
return (pow((1+s)/2, n) - pow((1-s)/2, n))/s;
}
}
实际上还有一种应该是矩阵的解决方法,可惜个人能力目前有限,暂未能手撕,尴尬了。哈哈哈。