剣の指は10番目の計算フィボナッチを提供します

タイトル

https://leetcode-cn.com/problems/fibonacci-number/solution/fei-bo-na-qi-shu-by-leetcode/

アイデア

最初の方法は再帰を使用しますが、計算が繰り返されるため時間がかかりすぎます。f(n)を見つけるにはf(n-1)とf(n-2)だけが必要なので、mapを使用して中間変数を保存します。最初の2つの計算結果を保存してください

コード

public class N10FeiBoNaQiShuLieLco {
    private static Map<Integer,Integer> map = new HashMap<>();
    //使用递归实现
    public static int fib(int n) {
        if(n==0||n==1){
            return n;
        }else {
            return fib(n-1)+fib(n-2);
        }
    }
    //保存中间结果
    public static int fib2(int n) {
        if(n==0||n==1){
            return n;
        }

        if(map.containsKey(n)) {
            return map.get(n);
        }

        int sum = fib(n - 1) + fib(n - 2);
        map.put(n, sum);
        return sum;
    }

    //升级方法二  不用保存全部中间值 自底向上
    // 要求f(n)  那我只要知道f(n-1) 和f(n-2)即可   所以从f(0)一直计算到f(n)即可
    public static int fib3(int n){
        if(n<=1){
            return n;
        }
        int fibNminus1 = 1;
        int fibNminus2 = 0;
        int fibn = 0;
        for (int i = 1; i < n; i++) {
            fibn = fibNminus1+fibNminus2;
            fibNminus2 = fibNminus1;
            fibNminus1 = fibn;
        }
        return fibn;
    }
    

    public static void main(String[] args) {
        System.out.println(fib3(3));
    }
}

追記2つの驚き

1.剣のオファーに対する答えは間違っています。0から始まるはずです。他の人は正しいです。恥ずかしさを理解できませんでした。
ここに画像の説明を挿入

2.Leetcodeの剣の指の提供の判断も間違っています。その前にLeetCodeでフィボナッチを使用する必要があります

元の記事を33件公開しました 賞賛されました37 再生回数110,000回

おすすめ

転載: blog.csdn.net/hagle_wang/article/details/104869617
おすすめ