JZ7 JZ10斐波那契數列及其變體

2021-10-10 20:06:08 字數 3625 閱讀 3658

題目描述

大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0,第1項是1)。n<=39

示例1輸入4

返回值3

方法一:遞迴(從上向下計算)題目分析,斐波那契數列公式為:f[n] = f[n-1] + f[n-2],初始值f[0]=0, f[1]=1,目標求f[n]

看到公式很親切,**秒秒鐘寫完。

int

fibonacci

(int n)

時間複雜度:o(2^n)

空間複雜度:遞迴棧的空間

優點:**簡單好寫,缺點:慢,會超時(效率低)

效率低的原因:

方法二:迴圈(從下向上計算)------------推薦

為了優化方法一(遞迴)中的重複計算,解決辦法是按上面樹狀圖從下向上迴圈)計算

class

solution

return fibn;}}

;

時間複雜度:o(n)

空間複雜度:o(1)

題目描述

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法(先後次序不同算不同的結果)。

示例1輸入1

返回值1

示例2輸入

4返回值

5

題解:只有1級台階:f(1)=1;

只有2級台階:f(2)=2;----------一種跳兩次,一次跳1級;一種跳一次,一次跳2級

有n級台階 :

這就得到了熟悉的公式:

遞迴

class

solution

};

class

solution

return floorn;}}

;

時間複雜度:o(n)

空間複雜度:o(1)

題目描述

乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。

示例1輸入3

返回值4

題解:f[i] 表示 當前跳道第 i 個台階的方法數。那麼f[n]就是所求答案。

跳上n級,有如下情況:

第一步跳1級,還剩n-1級,此時跳法數等於後面n-1級台階跳法數:f(n-1)

第一步跳2級,還剩n-2級,此時跳法數等於後面n-2級台階跳法數:f(n-2)

。。。。。。

第一步跳n-1級,還剩1級,此時跳法數等於後面1級台階跳法數:f(n-(n-1))=f(1)=1

第一步跳n級,還剩0級,此時跳法數等於f(n-n)=f(0)=1

即:f[n] = f[n-1] + f[n-2] + … + f[0], 初始條件f[0] = f[1] = 1

方法一:暴力方法

根據公式,我們就可以先求f[2],然後f[3]…f[n-1], 最後f[n]

int

jumpfloorii

(int n)

}return f[n]

;}

時間複雜度:o(n^2)

空間複雜度:o(n),建立了乙個vectorf(n+1, 0);

易知 f(n)=f(n-1)+f(n-2)+……f(1)+f(0)

f(n-1)=f(n-2)+……f(1)+f(0)

兩式相減得f(n)=2f(n-1)

以n=4為例:

遞迴實現(從上向下)

class

solution

};

時間複雜度:o(n)

空間複雜度:遞迴棧的空間

迴圈實現(從下向上)---------推薦

class

solution

return n;}}

;

時間複雜度:o(n)

空間複雜度:o(1)

題目描述

我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋乙個2*n的大矩形,總共有多少種方法?

比如n=3時,2*3的矩形塊有3種覆蓋方法:

示例1輸入4

返回值5

題解參考這裡

即,用f [n]表示2*n大矩陣 的方法數。

顯然:n=1,f(1)=1;

n=2,f(2)=2;

對於2*n大矩陣,覆蓋它的最右面的2*1小矩陣,要麼是豎著的,要麼是橫著的;

最右邊是豎著的需要1個小矩陣(去除這乙個豎著的,相當於剩下個2*n-1大矩陣,此時覆蓋方法是f(n-1)),

橫著的需要2個(去除這兩個橫著的,相當於剩下個2*n-2大矩陣,此時覆蓋方法是f(n-2))。

可以得出:

f[n] = f[n-1] + f[n-2],初始條件f[1] = 1, f[2] =2

是斐波那契數列,則用從下向上的迴圈方式實現它:

class

solution

return fn;}}

;

1.斐波那契數列的題都是從上向下分析,直觀上用遞迴實現,但實際上都會考慮效率問題,採用for迴圈的形式按從下向上寫**。

JZ7 斐波那契數列

大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項 從0開始,第0項為0,第1項是1 n 39 輸入4返回值 3class solution return c 複雜度分析 int fibonacci int n 複雜度分析 分析 遞迴實現的 簡潔易懂,但是需要注意的是,遞迴...

JZ10 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

大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項 從0開始,第0項為0 斐波那契數列屬於經典的遞迴問題,對於這題的求解,我們首先要知道斐波那契數列的狀態轉移式,即f n f n 1 f n 2 且在n 1或2時,f n 1。public static int feibol...