[剑指offer][JAVA]面试题第[10-1]题[斐波那契数列][动态规划][记忆化递归]
生活随笔
收集整理的這篇文章主要介紹了
[剑指offer][JAVA]面试题第[10-1]题[斐波那契数列][动态规划][记忆化递归]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【問題描述】[中等]
寫一個函數,輸入 n ,求斐波那契(Fibonacci)數列的第 n 項。斐波那契數列的定義如下:F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契數列由 0 和 1 開始,之后的斐波那契數就是由之前的兩數相加而得出。答案需要取模 1e9+7(1000000007),如計算初始結果為:1000000008,請返回 1。【解答思路】
1. 動態規劃
時間復雜度:O(N) 空間復雜度:O(1)
2. 動態規劃空間復雜度優化
dp[n + 1] -> abc
時間復雜度:O(N) 空間復雜度:O(1)
3. 遞歸(超時)
時間復雜度:O(2^N) 空間復雜度:O(1)
4. 記憶化遞歸
時間復雜度:O(N) 空間復雜度:O(1)
【總結】
1.取余原因
“int32類型是十位數,對1e9取模可防止int32溢出”、“1e9+7是質數,對質數取模可以盡可能地讓模數避免相等”以及“1e9+7是離1e9最近的質數,比較好記”
2.動態規劃和記憶化遞歸區別
原理類似,動態規劃有可能把空間復雜度降至 O(1)
3. 一開始就想到了方法二,其實方法二來源于動態規劃的優化
轉載鏈接:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/solution/mian-shi-ti-10-i-fei-bo-na-qi-shu-lie-dong-tai-gui/
總結
以上是生活随笔為你收集整理的[剑指offer][JAVA]面试题第[10-1]题[斐波那契数列][动态规划][记忆化递归]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯开源手游热更新方案,Unity3D下
- 下一篇: Java this关键字