优化斐波那数列时间复杂度

下面是时间复杂度为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;
       } 
 }

实际上还有一种应该是矩阵的解决方法,可惜个人能力目前有限,暂未能手撕,尴尬了。哈哈哈。

发布了10 篇原创文章 · 获赞 8 · 访问量 1169

猜你喜欢

转载自blog.csdn.net/userIDsss/article/details/105179493