1. 程式人生 > >牛客網線上程式設計專題《劍指offer-面試題9》斐波那契數列

牛客網線上程式設計專題《劍指offer-面試題9》斐波那契數列

題目連結:

題目描述:

解題思路:

(1)遞迴解法

此解法時間複雜度和空間複雜度都很大,我這裡不再給出詳細的程式碼。

(2)動態規劃解法

已經AC的程式碼:

import java.util.Arrays;

public class fibonacci {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(Fibonacci(7));
	}
	
    public static int Fibonacci(int n) {
    	if(n == 0)
    		return 0;
    	else if(n == 1 || n == 2)
    		return 1;
    	else {
        	int[] memo = new int[n+1];
        	Arrays.fill(memo, -1);
        	memo[0] = 0;
        	memo[1] = 1;
        	memo[2] = 1;
        	for(int i=3; i<=n; i++) {
        		if(memo[i] == -1)
        			memo[i] = memo[i-1] + memo[i-2];
        	}
        	return memo[n];
		}
    }

}

相關推薦

offer試題10:數列

 題目描述: 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。n<=39 思路一:遞迴 (通常來說編譯器對尾遞迴是會有化,所以實際效果還是可以的,不過最好是自己實現優化。不能依賴編譯器) 參考部落格:尾遞迴與編

網線程式設計Offer》如何通過本地來除錯

一、序言(廢話) 在我準備找工作的時候, 雖然讀的通訊,但是還是想著往比較火的網際網路轉。然後呢,就到牛客網上去刷題。 無非就是這麼幾個線上程式設計專題 ,我主要針對的是【華為機試板塊】,但是找工作嘛,那句俗話                            

網線程式設計offer)---字串替換

題目描述 請實現一個函式,將一個字串中的空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。 思路分析: 之前在書上看到這個題,本來這個題的思想時,為了降低替換的複雜度,應該首先遍歷得到替換

offer(7)數列

sub write return 16px color 現在 UNC 輸入一個整數 得到 題目描述: 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。n<=39 解題代碼: function Fibonacc

offer——(3)數列&&跳臺階&&瘋狂跳臺階進階版&&矩形覆蓋

 這兩道題 其實相同。 public class Solution { /* 一看到題目就想到用遞迴,結果雖然能通過,但時間還是太長 */ public int Fibonacci(int target) { return hhh(ta

offer{7-10}】數列、跳臺階、變態跳臺階、矩形覆蓋

斐波那契數列、跳臺階、變態跳臺階、矩形覆蓋題目描述C++程式碼跳臺階題目描述C++程式碼變態跳臺階題目描述C++程式碼矩形覆蓋題目描述C++程式碼 注:思路均是動態規劃,用中間陣列dp存放計算值,如果

Offer》Java實現-數列

題目描述 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項。 n<=39 思路 很基礎的題目,有遞迴和非遞迴兩種實現思路。 程式碼 遞迴演算法

網線程式設計專題offer》(8)跳臺階

題目連線: 題目: 解題思路: 1. 問題分析 設f(n)表示青蛙跳上n級臺階的跳法數。 當只有一個臺階時,即n = 1時,只有1中跳法; 當n = 2時,有2種跳法; 當n = 3 時,有3種跳法; 當n很大時,青蛙在最後一步跳到第n級臺階時,有兩種情況:

網線程式設計專題offer-試題17》合併兩個排序的連結串列

題目連結: 題目描述: 解題思路: (1)方法一: 修改兩個待合併連結串列的引用域,使它們稱為一個有序的連結串列list3。具體思路如下圖所示: 已經AC的程式碼: public class MergeLinkedList { // 定義結點

網線程式設計專題offer-試題18》樹的子結構

題目連結: 題目描述: 解題思路: 本題的解題過程分為兩步: 1)第一步,在樹A中查詢與根結點的值一樣的結點,這實際上就是樹的遍歷。 2)第二步,判斷A樹中以R為根結點的子樹是不是和樹B具有相同的結構。如果結點R的值和樹B的根結點不相同,則以R為根結點的子樹

網線程式設計專題offer-試題39》二叉樹的深度

題目連結: 題目描述: 解題思路: 解法:遞迴的遍歷一棵數的左右子樹。 已經AC的程式碼: public class treeDepth39 { public class Tr

網線程式設計專題offer-試題37》兩個連結串列的第一個公共結點

題目連結: 題目描述: 解題思路: 首先遍歷兩個連結串列得到它們的長度,就能知道哪個連結串列比較長,以及長的連結串列比短的連結串列多幾個結點。在第二次遍歷的時候,在較長的連結串列上先走若干步,接著再同時在兩個連結串列上遍歷,找到的第一個相同的結點就是它們的第

網線程式設計專題offer-試題9:相關題目》矩形覆蓋

題目連結: 題目描述:    解題思路: 2*n的大矩形,和n個2*1的小矩形 其中2*target為大矩陣的大小,target也是小矩形的個數。 有以下幾種情形: target <= 0 大矩形為2*0,直接return 1; target = 1

網線程式設計專題offer-試題38》數字在排序陣列中出現的次數

題目連結: https://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2?tpId=13&tqId=11190&tPage=2&rp=2&ru=/ta/coding-interviews&

網線程式設計專題offer-試題9數列

題目連結: 題目描述: 解題思路: (1)遞迴解法 此解法時間複雜度和空間複雜度都很大,我這裡不再給出詳細的程式碼。 (2)動態規劃解法 已經AC的程式碼: import java

offer試題9:用兩個棧實現佇列(兩個佇列模擬棧)

 題目描述: 用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。 思路一:有點死腦筋,每次pop後都預設下次是push操作,,,,。233主要是由於沒把握好兩個棧模擬時入隊和出隊的時機。考慮stack1和stack2的大小和入隊出隊的關係即可改

offer 9. 數列

輸入一個整數 n ,求斐波那契數列的第 n 項。 假定從0開始,第0項為0。(n<=39) 樣例 輸入整數 n=5 返回 5 滾動陣列 時間複雜度 O

offer-試題9數列

題目一:寫一個函式,輸入n,求斐波那契(Fabonacci)數列的第n項。斐波那契數列的定義如下: 效率很低的解法:遞迴 long long Fibonacci(unsigned n) { if(n <= 0) return 0;

offer——試題9:用兩個棧實現隊列

end with using mes 結點 main std delet alt #include "Queue.h" // ====================測試代碼==================== void Test(char actual, cha

網線程式設計(四):電話號碼分身-python

題目描述 繼MIUI8推出手機分身功能之後,MIUI9計劃推出一個電話號碼分身的功能:首先將電話號碼中的每個數字加上8取個位,然後使用對應的大寫字母代替 ("ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGH