/*
*動態規劃解析:
狀態定義: 設 dpdp 為一維陣列,其中 dp[i]dp[i] 的值代表 斐波那契數列第 ii 個數字 。
轉移方程: dp[i + 1] = dp[i] + dp[i - 1]dp[i+1]=dp[i]+dp[i−1] ,即對應數列定義 f(n + 1) = f(n) + f(n - 1)f(n+1)=f(n)+f(n−1) ;
初始狀態: dp[0] = 0dp[0]=0, dp[1] = 1dp[1]=1 ,即初始化前兩個數字;
返回值: dp[n]dp[n] ,即斐波那契數列的第 nn 個數字。
空間複雜度優化:
若新建長度為 nn 的 dpdp 列表,則空間複雜度為 o(n)o(n) 。
由於 dpdp 列表第 ii 項只與第 i-1i−1 和第 i-2i−2 項有關,因此只需要初始化三個整形變數 sum, a, b ,利用輔助變數 sumsum 使 a, ba,b 兩數字交替前進即可 (具體實現見**) 。
節省了 dpdp 列表空間,因此空間複雜度降至 o(1)o(1) 。
* * */
#include
class
solution
intfib2
(int n)
return a;
}int
fib3
(int n)};
intmain()
劍指Offer 面試題10 I 斐波那契數列
寫乙個函式,輸入 n 求斐波那契 fibonacci 數列的第 n 項。斐波那契數列的定義如下 f 0 0,f 1 1 f n f n 1 f n 2 其中 n 1.斐波那契數列由 0 和 1 開始,之後的斐波那契數就是由之前的兩數相加而得出。答案需要取模 1e9 7 1000000007 如計算初...
面試題10 I 斐波那契數列
title 面試題10 i.斐波那契數列 introduce 寫乙個函式,輸入 n 求斐波那契 fibonacci 數列的第 n 項。斐波那契數列的定義如下 f 0 0,f 1 1 f n f n 1 f n 2 其中 n 1.斐波那契數列由 0 和 1 開始,之後的斐波那契數就是由之前的兩數相加而...
面試題10 I 斐波那契數列
寫乙個函式,輸入 n 求斐波那契 fibonacci 數列的第 n 項。斐波那契數列的定義如下 f 0 0,f 1 1 f n f n 1 f n 2 其中 n 1.斐波那契數列由 0 和 1 開始,之後的斐波那契數就是由之前的兩數相加而得出。答案需要取模 1e9 7 1000000007 如計算初...