'LeetCode基礎算法題第154篇:求第N個Tribonacci數'

算法 Python C語言 Java 技術 田納西州 吾是我師 2019-08-19
"
"
LeetCode基礎算法題第154篇:求第N個Tribonacci數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。

如果有任何問題可以在文章後評論或者私信給我。

如果有朋友希望我講些其他話題,請在評論區留言或者私信給我。

持續分享,敬請關注。

LeetCode 1137. 求第N個泰波拿契數(N-th Tribonacci Number)

問題描述:

"
LeetCode基礎算法題第154篇:求第N個Tribonacci數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。

如果有任何問題可以在文章後評論或者私信給我。

如果有朋友希望我講些其他話題,請在評論區留言或者私信給我。

持續分享,敬請關注。

LeetCode 1137. 求第N個泰波拿契數(N-th Tribonacci Number)

問題描述:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

注:

  • 0 <= n <= 37;
  • 答案是一個32位整數,即。res <= 2^31 - 1;

示例:

"
LeetCode基礎算法題第154篇:求第N個Tribonacci數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。

如果有任何問題可以在文章後評論或者私信給我。

如果有朋友希望我講些其他話題,請在評論區留言或者私信給我。

持續分享,敬請關注。

LeetCode 1137. 求第N個泰波拿契數(N-th Tribonacci Number)

問題描述:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

注:

  • 0 <= n <= 37;
  • 答案是一個32位整數,即。res <= 2^31 - 1;

示例:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

C語言實現:

泰波拿契數是斐波那契數的擴展。它的求法與求斐波那契數類似,但是要複雜一些。

方法一:遞歸或者循環

我們依然可以用循環或者遞歸,像求斐波那契數那樣求泰波拿契數。

我這裡只說遞歸方法,因為遞歸代碼要更簡潔一些。

一個泰波拿契數是它前面的3個數的和,所以對於前3個數(0,1,1)我們直接賦值,無需計算。

其他的則返回 tribonacci(n-3) + tribonacci(n-2) + tribonacci(n-1)。

但是這裡要注意,如果簡單的這樣處理,那麼會有大量的重複計算。當n增大,效率會迅速下降。

為了避免重複計算,對於已經計算過的數,要存起來,下次用的時候直接取。鑑於題目要求n不大於37,所以我們定義一個長度時38的數組T來保存這些數。

方法二:通項公式

在前面我講,如何求第n個斐波那契數時,我提到了用數列的通項公式一次求出。在這裡我們試著求出泰波拿契數的通項公式。

對於一個泰波拿契數數列,我們可以得出如下的關係:

"
LeetCode基礎算法題第154篇:求第N個Tribonacci數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。

如果有任何問題可以在文章後評論或者私信給我。

如果有朋友希望我講些其他話題,請在評論區留言或者私信給我。

持續分享,敬請關注。

LeetCode 1137. 求第N個泰波拿契數(N-th Tribonacci Number)

問題描述:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

注:

  • 0 <= n <= 37;
  • 答案是一個32位整數,即。res <= 2^31 - 1;

示例:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

C語言實現:

泰波拿契數是斐波那契數的擴展。它的求法與求斐波那契數類似,但是要複雜一些。

方法一:遞歸或者循環

我們依然可以用循環或者遞歸,像求斐波那契數那樣求泰波拿契數。

我這裡只說遞歸方法,因為遞歸代碼要更簡潔一些。

一個泰波拿契數是它前面的3個數的和,所以對於前3個數(0,1,1)我們直接賦值,無需計算。

其他的則返回 tribonacci(n-3) + tribonacci(n-2) + tribonacci(n-1)。

但是這裡要注意,如果簡單的這樣處理,那麼會有大量的重複計算。當n增大,效率會迅速下降。

為了避免重複計算,對於已經計算過的數,要存起來,下次用的時候直接取。鑑於題目要求n不大於37,所以我們定義一個長度時38的數組T來保存這些數。

方法二:通項公式

在前面我講,如何求第n個斐波那契數時,我提到了用數列的通項公式一次求出。在這裡我們試著求出泰波拿契數的通項公式。

對於一個泰波拿契數數列,我們可以得出如下的關係:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

可以得到A的特徵方程:

"
LeetCode基礎算法題第154篇:求第N個Tribonacci數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。

如果有任何問題可以在文章後評論或者私信給我。

如果有朋友希望我講些其他話題,請在評論區留言或者私信給我。

持續分享,敬請關注。

LeetCode 1137. 求第N個泰波拿契數(N-th Tribonacci Number)

問題描述:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

注:

  • 0 <= n <= 37;
  • 答案是一個32位整數,即。res <= 2^31 - 1;

示例:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

C語言實現:

泰波拿契數是斐波那契數的擴展。它的求法與求斐波那契數類似,但是要複雜一些。

方法一:遞歸或者循環

我們依然可以用循環或者遞歸,像求斐波那契數那樣求泰波拿契數。

我這裡只說遞歸方法,因為遞歸代碼要更簡潔一些。

一個泰波拿契數是它前面的3個數的和,所以對於前3個數(0,1,1)我們直接賦值,無需計算。

其他的則返回 tribonacci(n-3) + tribonacci(n-2) + tribonacci(n-1)。

但是這裡要注意,如果簡單的這樣處理,那麼會有大量的重複計算。當n增大,效率會迅速下降。

為了避免重複計算,對於已經計算過的數,要存起來,下次用的時候直接取。鑑於題目要求n不大於37,所以我們定義一個長度時38的數組T來保存這些數。

方法二:通項公式

在前面我講,如何求第n個斐波那契數時,我提到了用數列的通項公式一次求出。在這裡我們試著求出泰波拿契數的通項公式。

對於一個泰波拿契數數列,我們可以得出如下的關係:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

可以得到A的特徵方程:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

解這個一元三次方程得到它的3個解, α,β 和 γ :

其種 α 是唯一的實根,是一個無理數。

"
LeetCode基礎算法題第154篇:求第N個Tribonacci數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。

如果有任何問題可以在文章後評論或者私信給我。

如果有朋友希望我講些其他話題,請在評論區留言或者私信給我。

持續分享,敬請關注。

LeetCode 1137. 求第N個泰波拿契數(N-th Tribonacci Number)

問題描述:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

注:

  • 0 <= n <= 37;
  • 答案是一個32位整數,即。res <= 2^31 - 1;

示例:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

C語言實現:

泰波拿契數是斐波那契數的擴展。它的求法與求斐波那契數類似,但是要複雜一些。

方法一:遞歸或者循環

我們依然可以用循環或者遞歸,像求斐波那契數那樣求泰波拿契數。

我這裡只說遞歸方法,因為遞歸代碼要更簡潔一些。

一個泰波拿契數是它前面的3個數的和,所以對於前3個數(0,1,1)我們直接賦值,無需計算。

其他的則返回 tribonacci(n-3) + tribonacci(n-2) + tribonacci(n-1)。

但是這裡要注意,如果簡單的這樣處理,那麼會有大量的重複計算。當n增大,效率會迅速下降。

為了避免重複計算,對於已經計算過的數,要存起來,下次用的時候直接取。鑑於題目要求n不大於37,所以我們定義一個長度時38的數組T來保存這些數。

方法二:通項公式

在前面我講,如何求第n個斐波那契數時,我提到了用數列的通項公式一次求出。在這裡我們試著求出泰波拿契數的通項公式。

對於一個泰波拿契數數列,我們可以得出如下的關係:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

可以得到A的特徵方程:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

解這個一元三次方程得到它的3個解, α,β 和 γ :

其種 α 是唯一的實根,是一個無理數。

LeetCode基礎算法題第154篇:求第N個Tribonacci數

"
LeetCode基礎算法題第154篇:求第N個Tribonacci數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。

如果有任何問題可以在文章後評論或者私信給我。

如果有朋友希望我講些其他話題,請在評論區留言或者私信給我。

持續分享,敬請關注。

LeetCode 1137. 求第N個泰波拿契數(N-th Tribonacci Number)

問題描述:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

注:

  • 0 <= n <= 37;
  • 答案是一個32位整數,即。res <= 2^31 - 1;

示例:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

C語言實現:

泰波拿契數是斐波那契數的擴展。它的求法與求斐波那契數類似,但是要複雜一些。

方法一:遞歸或者循環

我們依然可以用循環或者遞歸,像求斐波那契數那樣求泰波拿契數。

我這裡只說遞歸方法,因為遞歸代碼要更簡潔一些。

一個泰波拿契數是它前面的3個數的和,所以對於前3個數(0,1,1)我們直接賦值,無需計算。

其他的則返回 tribonacci(n-3) + tribonacci(n-2) + tribonacci(n-1)。

但是這裡要注意,如果簡單的這樣處理,那麼會有大量的重複計算。當n增大,效率會迅速下降。

為了避免重複計算,對於已經計算過的數,要存起來,下次用的時候直接取。鑑於題目要求n不大於37,所以我們定義一個長度時38的數組T來保存這些數。

方法二:通項公式

在前面我講,如何求第n個斐波那契數時,我提到了用數列的通項公式一次求出。在這裡我們試著求出泰波拿契數的通項公式。

對於一個泰波拿契數數列,我們可以得出如下的關係:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

可以得到A的特徵方程:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

解這個一元三次方程得到它的3個解, α,β 和 γ :

其種 α 是唯一的實根,是一個無理數。

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

βγ 是兩個共軛複數根。

因此它的比內公式表示為:

"
LeetCode基礎算法題第154篇:求第N個Tribonacci數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。

如果有任何問題可以在文章後評論或者私信給我。

如果有朋友希望我講些其他話題,請在評論區留言或者私信給我。

持續分享,敬請關注。

LeetCode 1137. 求第N個泰波拿契數(N-th Tribonacci Number)

問題描述:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

注:

  • 0 <= n <= 37;
  • 答案是一個32位整數,即。res <= 2^31 - 1;

示例:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

C語言實現:

泰波拿契數是斐波那契數的擴展。它的求法與求斐波那契數類似,但是要複雜一些。

方法一:遞歸或者循環

我們依然可以用循環或者遞歸,像求斐波那契數那樣求泰波拿契數。

我這裡只說遞歸方法,因為遞歸代碼要更簡潔一些。

一個泰波拿契數是它前面的3個數的和,所以對於前3個數(0,1,1)我們直接賦值,無需計算。

其他的則返回 tribonacci(n-3) + tribonacci(n-2) + tribonacci(n-1)。

但是這裡要注意,如果簡單的這樣處理,那麼會有大量的重複計算。當n增大,效率會迅速下降。

為了避免重複計算,對於已經計算過的數,要存起來,下次用的時候直接取。鑑於題目要求n不大於37,所以我們定義一個長度時38的數組T來保存這些數。

方法二:通項公式

在前面我講,如何求第n個斐波那契數時,我提到了用數列的通項公式一次求出。在這裡我們試著求出泰波拿契數的通項公式。

對於一個泰波拿契數數列,我們可以得出如下的關係:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

可以得到A的特徵方程:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

解這個一元三次方程得到它的3個解, α,β 和 γ :

其種 α 是唯一的實根,是一個無理數。

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

βγ 是兩個共軛複數根。

因此它的比內公式表示為:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

(篇幅有限,關於其比內公式的推導,見https://www.mscs.dal.ca/FQ/Scanned/20-2/spickerman.pdf)

第一次看到這個公式很錯愕,無理數和複數的和得到一個整實數,多麼神奇。

看到這裡的朋友一定很好奇算法怎麼實現。

其實該比內公式的後兩項對結果的影響非常小,只對Tn​的精度有非常小的影響,我們可以簡化成:

"
LeetCode基礎算法題第154篇:求第N個Tribonacci數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。

如果有任何問題可以在文章後評論或者私信給我。

如果有朋友希望我講些其他話題,請在評論區留言或者私信給我。

持續分享,敬請關注。

LeetCode 1137. 求第N個泰波拿契數(N-th Tribonacci Number)

問題描述:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

注:

  • 0 <= n <= 37;
  • 答案是一個32位整數,即。res <= 2^31 - 1;

示例:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

C語言實現:

泰波拿契數是斐波那契數的擴展。它的求法與求斐波那契數類似,但是要複雜一些。

方法一:遞歸或者循環

我們依然可以用循環或者遞歸,像求斐波那契數那樣求泰波拿契數。

我這裡只說遞歸方法,因為遞歸代碼要更簡潔一些。

一個泰波拿契數是它前面的3個數的和,所以對於前3個數(0,1,1)我們直接賦值,無需計算。

其他的則返回 tribonacci(n-3) + tribonacci(n-2) + tribonacci(n-1)。

但是這裡要注意,如果簡單的這樣處理,那麼會有大量的重複計算。當n增大,效率會迅速下降。

為了避免重複計算,對於已經計算過的數,要存起來,下次用的時候直接取。鑑於題目要求n不大於37,所以我們定義一個長度時38的數組T來保存這些數。

方法二:通項公式

在前面我講,如何求第n個斐波那契數時,我提到了用數列的通項公式一次求出。在這裡我們試著求出泰波拿契數的通項公式。

對於一個泰波拿契數數列,我們可以得出如下的關係:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

可以得到A的特徵方程:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

解這個一元三次方程得到它的3個解, α,β 和 γ :

其種 α 是唯一的實根,是一個無理數。

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

βγ 是兩個共軛複數根。

因此它的比內公式表示為:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

(篇幅有限,關於其比內公式的推導,見https://www.mscs.dal.ca/FQ/Scanned/20-2/spickerman.pdf)

第一次看到這個公式很錯愕,無理數和複數的和得到一個整實數,多麼神奇。

看到這裡的朋友一定很好奇算法怎麼實現。

其實該比內公式的後兩項對結果的影響非常小,只對Tn​的精度有非常小的影響,我們可以簡化成:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

這個符號表示對結果進行四捨五入。我實際測試的結果: 對n小於57的任意Tn​ 都不受影響。完全滿足題目要求

兩種算法的代碼如下:

"
LeetCode基礎算法題第154篇:求第N個Tribonacci數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。

如果有任何問題可以在文章後評論或者私信給我。

如果有朋友希望我講些其他話題,請在評論區留言或者私信給我。

持續分享,敬請關注。

LeetCode 1137. 求第N個泰波拿契數(N-th Tribonacci Number)

問題描述:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

注:

  • 0 <= n <= 37;
  • 答案是一個32位整數,即。res <= 2^31 - 1;

示例:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

C語言實現:

泰波拿契數是斐波那契數的擴展。它的求法與求斐波那契數類似,但是要複雜一些。

方法一:遞歸或者循環

我們依然可以用循環或者遞歸,像求斐波那契數那樣求泰波拿契數。

我這裡只說遞歸方法,因為遞歸代碼要更簡潔一些。

一個泰波拿契數是它前面的3個數的和,所以對於前3個數(0,1,1)我們直接賦值,無需計算。

其他的則返回 tribonacci(n-3) + tribonacci(n-2) + tribonacci(n-1)。

但是這裡要注意,如果簡單的這樣處理,那麼會有大量的重複計算。當n增大,效率會迅速下降。

為了避免重複計算,對於已經計算過的數,要存起來,下次用的時候直接取。鑑於題目要求n不大於37,所以我們定義一個長度時38的數組T來保存這些數。

方法二:通項公式

在前面我講,如何求第n個斐波那契數時,我提到了用數列的通項公式一次求出。在這裡我們試著求出泰波拿契數的通項公式。

對於一個泰波拿契數數列,我們可以得出如下的關係:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

可以得到A的特徵方程:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

解這個一元三次方程得到它的3個解, α,β 和 γ :

其種 α 是唯一的實根,是一個無理數。

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

βγ 是兩個共軛複數根。

因此它的比內公式表示為:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

(篇幅有限,關於其比內公式的推導,見https://www.mscs.dal.ca/FQ/Scanned/20-2/spickerman.pdf)

第一次看到這個公式很錯愕,無理數和複數的和得到一個整實數,多麼神奇。

看到這裡的朋友一定很好奇算法怎麼實現。

其實該比內公式的後兩項對結果的影響非常小,只對Tn​的精度有非常小的影響,我們可以簡化成:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

這個符號表示對結果進行四捨五入。我實際測試的結果: 對n小於57的任意Tn​ 都不受影響。完全滿足題目要求

兩種算法的代碼如下:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

"
LeetCode基礎算法題第154篇:求第N個Tribonacci數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。

如果有任何問題可以在文章後評論或者私信給我。

如果有朋友希望我講些其他話題,請在評論區留言或者私信給我。

持續分享,敬請關注。

LeetCode 1137. 求第N個泰波拿契數(N-th Tribonacci Number)

問題描述:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

注:

  • 0 <= n <= 37;
  • 答案是一個32位整數,即。res <= 2^31 - 1;

示例:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

C語言實現:

泰波拿契數是斐波那契數的擴展。它的求法與求斐波那契數類似,但是要複雜一些。

方法一:遞歸或者循環

我們依然可以用循環或者遞歸,像求斐波那契數那樣求泰波拿契數。

我這裡只說遞歸方法,因為遞歸代碼要更簡潔一些。

一個泰波拿契數是它前面的3個數的和,所以對於前3個數(0,1,1)我們直接賦值,無需計算。

其他的則返回 tribonacci(n-3) + tribonacci(n-2) + tribonacci(n-1)。

但是這裡要注意,如果簡單的這樣處理,那麼會有大量的重複計算。當n增大,效率會迅速下降。

為了避免重複計算,對於已經計算過的數,要存起來,下次用的時候直接取。鑑於題目要求n不大於37,所以我們定義一個長度時38的數組T來保存這些數。

方法二:通項公式

在前面我講,如何求第n個斐波那契數時,我提到了用數列的通項公式一次求出。在這裡我們試著求出泰波拿契數的通項公式。

對於一個泰波拿契數數列,我們可以得出如下的關係:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

可以得到A的特徵方程:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

解這個一元三次方程得到它的3個解, α,β 和 γ :

其種 α 是唯一的實根,是一個無理數。

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

βγ 是兩個共軛複數根。

因此它的比內公式表示為:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

(篇幅有限,關於其比內公式的推導,見https://www.mscs.dal.ca/FQ/Scanned/20-2/spickerman.pdf)

第一次看到這個公式很錯愕,無理數和複數的和得到一個整實數,多麼神奇。

看到這裡的朋友一定很好奇算法怎麼實現。

其實該比內公式的後兩項對結果的影響非常小,只對Tn​的精度有非常小的影響,我們可以簡化成:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

這個符號表示對結果進行四捨五入。我實際測試的結果: 對n小於57的任意Tn​ 都不受影響。完全滿足題目要求

兩種算法的代碼如下:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

"
LeetCode基礎算法題第154篇:求第N個Tribonacci數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。

如果有任何問題可以在文章後評論或者私信給我。

如果有朋友希望我講些其他話題,請在評論區留言或者私信給我。

持續分享,敬請關注。

LeetCode 1137. 求第N個泰波拿契數(N-th Tribonacci Number)

問題描述:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

注:

  • 0 <= n <= 37;
  • 答案是一個32位整數,即。res <= 2^31 - 1;

示例:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

C語言實現:

泰波拿契數是斐波那契數的擴展。它的求法與求斐波那契數類似,但是要複雜一些。

方法一:遞歸或者循環

我們依然可以用循環或者遞歸,像求斐波那契數那樣求泰波拿契數。

我這裡只說遞歸方法,因為遞歸代碼要更簡潔一些。

一個泰波拿契數是它前面的3個數的和,所以對於前3個數(0,1,1)我們直接賦值,無需計算。

其他的則返回 tribonacci(n-3) + tribonacci(n-2) + tribonacci(n-1)。

但是這裡要注意,如果簡單的這樣處理,那麼會有大量的重複計算。當n增大,效率會迅速下降。

為了避免重複計算,對於已經計算過的數,要存起來,下次用的時候直接取。鑑於題目要求n不大於37,所以我們定義一個長度時38的數組T來保存這些數。

方法二:通項公式

在前面我講,如何求第n個斐波那契數時,我提到了用數列的通項公式一次求出。在這裡我們試著求出泰波拿契數的通項公式。

對於一個泰波拿契數數列,我們可以得出如下的關係:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

可以得到A的特徵方程:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

解這個一元三次方程得到它的3個解, α,β 和 γ :

其種 α 是唯一的實根,是一個無理數。

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

βγ 是兩個共軛複數根。

因此它的比內公式表示為:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

(篇幅有限,關於其比內公式的推導,見https://www.mscs.dal.ca/FQ/Scanned/20-2/spickerman.pdf)

第一次看到這個公式很錯愕,無理數和複數的和得到一個整實數,多麼神奇。

看到這裡的朋友一定很好奇算法怎麼實現。

其實該比內公式的後兩項對結果的影響非常小,只對Tn​的精度有非常小的影響,我們可以簡化成:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

這個符號表示對結果進行四捨五入。我實際測試的結果: 對n小於57的任意Tn​ 都不受影響。完全滿足題目要求

兩種算法的代碼如下:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

Java語言實現:

Java 的實現和C語言的實現一致,不再撰述。

代碼如下:

"
LeetCode基礎算法題第154篇:求第N個Tribonacci數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。

如果有任何問題可以在文章後評論或者私信給我。

如果有朋友希望我講些其他話題,請在評論區留言或者私信給我。

持續分享,敬請關注。

LeetCode 1137. 求第N個泰波拿契數(N-th Tribonacci Number)

問題描述:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

注:

  • 0 <= n <= 37;
  • 答案是一個32位整數,即。res <= 2^31 - 1;

示例:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

C語言實現:

泰波拿契數是斐波那契數的擴展。它的求法與求斐波那契數類似,但是要複雜一些。

方法一:遞歸或者循環

我們依然可以用循環或者遞歸,像求斐波那契數那樣求泰波拿契數。

我這裡只說遞歸方法,因為遞歸代碼要更簡潔一些。

一個泰波拿契數是它前面的3個數的和,所以對於前3個數(0,1,1)我們直接賦值,無需計算。

其他的則返回 tribonacci(n-3) + tribonacci(n-2) + tribonacci(n-1)。

但是這裡要注意,如果簡單的這樣處理,那麼會有大量的重複計算。當n增大,效率會迅速下降。

為了避免重複計算,對於已經計算過的數,要存起來,下次用的時候直接取。鑑於題目要求n不大於37,所以我們定義一個長度時38的數組T來保存這些數。

方法二:通項公式

在前面我講,如何求第n個斐波那契數時,我提到了用數列的通項公式一次求出。在這裡我們試著求出泰波拿契數的通項公式。

對於一個泰波拿契數數列,我們可以得出如下的關係:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

可以得到A的特徵方程:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

解這個一元三次方程得到它的3個解, α,β 和 γ :

其種 α 是唯一的實根,是一個無理數。

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

βγ 是兩個共軛複數根。

因此它的比內公式表示為:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

(篇幅有限,關於其比內公式的推導,見https://www.mscs.dal.ca/FQ/Scanned/20-2/spickerman.pdf)

第一次看到這個公式很錯愕,無理數和複數的和得到一個整實數,多麼神奇。

看到這裡的朋友一定很好奇算法怎麼實現。

其實該比內公式的後兩項對結果的影響非常小,只對Tn​的精度有非常小的影響,我們可以簡化成:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

這個符號表示對結果進行四捨五入。我實際測試的結果: 對n小於57的任意Tn​ 都不受影響。完全滿足題目要求

兩種算法的代碼如下:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

Java語言實現:

Java 的實現和C語言的實現一致,不再撰述。

代碼如下:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

"
LeetCode基礎算法題第154篇:求第N個Tribonacci數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。

如果有任何問題可以在文章後評論或者私信給我。

如果有朋友希望我講些其他話題,請在評論區留言或者私信給我。

持續分享,敬請關注。

LeetCode 1137. 求第N個泰波拿契數(N-th Tribonacci Number)

問題描述:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

注:

  • 0 <= n <= 37;
  • 答案是一個32位整數,即。res <= 2^31 - 1;

示例:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

C語言實現:

泰波拿契數是斐波那契數的擴展。它的求法與求斐波那契數類似,但是要複雜一些。

方法一:遞歸或者循環

我們依然可以用循環或者遞歸,像求斐波那契數那樣求泰波拿契數。

我這裡只說遞歸方法,因為遞歸代碼要更簡潔一些。

一個泰波拿契數是它前面的3個數的和,所以對於前3個數(0,1,1)我們直接賦值,無需計算。

其他的則返回 tribonacci(n-3) + tribonacci(n-2) + tribonacci(n-1)。

但是這裡要注意,如果簡單的這樣處理,那麼會有大量的重複計算。當n增大,效率會迅速下降。

為了避免重複計算,對於已經計算過的數,要存起來,下次用的時候直接取。鑑於題目要求n不大於37,所以我們定義一個長度時38的數組T來保存這些數。

方法二:通項公式

在前面我講,如何求第n個斐波那契數時,我提到了用數列的通項公式一次求出。在這裡我們試著求出泰波拿契數的通項公式。

對於一個泰波拿契數數列,我們可以得出如下的關係:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

可以得到A的特徵方程:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

解這個一元三次方程得到它的3個解, α,β 和 γ :

其種 α 是唯一的實根,是一個無理數。

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

βγ 是兩個共軛複數根。

因此它的比內公式表示為:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

(篇幅有限,關於其比內公式的推導,見https://www.mscs.dal.ca/FQ/Scanned/20-2/spickerman.pdf)

第一次看到這個公式很錯愕,無理數和複數的和得到一個整實數,多麼神奇。

看到這裡的朋友一定很好奇算法怎麼實現。

其實該比內公式的後兩項對結果的影響非常小,只對Tn​的精度有非常小的影響,我們可以簡化成:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

這個符號表示對結果進行四捨五入。我實際測試的結果: 對n小於57的任意Tn​ 都不受影響。完全滿足題目要求

兩種算法的代碼如下:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

Java語言實現:

Java 的實現和C語言的實現一致,不再撰述。

代碼如下:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

"
LeetCode基礎算法題第154篇:求第N個Tribonacci數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。

如果有任何問題可以在文章後評論或者私信給我。

如果有朋友希望我講些其他話題,請在評論區留言或者私信給我。

持續分享,敬請關注。

LeetCode 1137. 求第N個泰波拿契數(N-th Tribonacci Number)

問題描述:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

注:

  • 0 <= n <= 37;
  • 答案是一個32位整數,即。res <= 2^31 - 1;

示例:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

C語言實現:

泰波拿契數是斐波那契數的擴展。它的求法與求斐波那契數類似,但是要複雜一些。

方法一:遞歸或者循環

我們依然可以用循環或者遞歸,像求斐波那契數那樣求泰波拿契數。

我這裡只說遞歸方法,因為遞歸代碼要更簡潔一些。

一個泰波拿契數是它前面的3個數的和,所以對於前3個數(0,1,1)我們直接賦值,無需計算。

其他的則返回 tribonacci(n-3) + tribonacci(n-2) + tribonacci(n-1)。

但是這裡要注意,如果簡單的這樣處理,那麼會有大量的重複計算。當n增大,效率會迅速下降。

為了避免重複計算,對於已經計算過的數,要存起來,下次用的時候直接取。鑑於題目要求n不大於37,所以我們定義一個長度時38的數組T來保存這些數。

方法二:通項公式

在前面我講,如何求第n個斐波那契數時,我提到了用數列的通項公式一次求出。在這裡我們試著求出泰波拿契數的通項公式。

對於一個泰波拿契數數列,我們可以得出如下的關係:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

可以得到A的特徵方程:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

解這個一元三次方程得到它的3個解, α,β 和 γ :

其種 α 是唯一的實根,是一個無理數。

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

βγ 是兩個共軛複數根。

因此它的比內公式表示為:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

(篇幅有限,關於其比內公式的推導,見https://www.mscs.dal.ca/FQ/Scanned/20-2/spickerman.pdf)

第一次看到這個公式很錯愕,無理數和複數的和得到一個整實數,多麼神奇。

看到這裡的朋友一定很好奇算法怎麼實現。

其實該比內公式的後兩項對結果的影響非常小,只對Tn​的精度有非常小的影響,我們可以簡化成:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

這個符號表示對結果進行四捨五入。我實際測試的結果: 對n小於57的任意Tn​ 都不受影響。完全滿足題目要求

兩種算法的代碼如下:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

Java語言實現:

Java 的實現和C語言的實現一致,不再撰述。

代碼如下:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

Python語言實現:

Python 的實現和C語言的實現一致,不再撰述。

代碼如下:

"
LeetCode基礎算法題第154篇:求第N個Tribonacci數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。

如果有任何問題可以在文章後評論或者私信給我。

如果有朋友希望我講些其他話題,請在評論區留言或者私信給我。

持續分享,敬請關注。

LeetCode 1137. 求第N個泰波拿契數(N-th Tribonacci Number)

問題描述:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

注:

  • 0 <= n <= 37;
  • 答案是一個32位整數,即。res <= 2^31 - 1;

示例:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

C語言實現:

泰波拿契數是斐波那契數的擴展。它的求法與求斐波那契數類似,但是要複雜一些。

方法一:遞歸或者循環

我們依然可以用循環或者遞歸,像求斐波那契數那樣求泰波拿契數。

我這裡只說遞歸方法,因為遞歸代碼要更簡潔一些。

一個泰波拿契數是它前面的3個數的和,所以對於前3個數(0,1,1)我們直接賦值,無需計算。

其他的則返回 tribonacci(n-3) + tribonacci(n-2) + tribonacci(n-1)。

但是這裡要注意,如果簡單的這樣處理,那麼會有大量的重複計算。當n增大,效率會迅速下降。

為了避免重複計算,對於已經計算過的數,要存起來,下次用的時候直接取。鑑於題目要求n不大於37,所以我們定義一個長度時38的數組T來保存這些數。

方法二:通項公式

在前面我講,如何求第n個斐波那契數時,我提到了用數列的通項公式一次求出。在這裡我們試著求出泰波拿契數的通項公式。

對於一個泰波拿契數數列,我們可以得出如下的關係:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

可以得到A的特徵方程:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

解這個一元三次方程得到它的3個解, α,β 和 γ :

其種 α 是唯一的實根,是一個無理數。

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

βγ 是兩個共軛複數根。

因此它的比內公式表示為:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

(篇幅有限,關於其比內公式的推導,見https://www.mscs.dal.ca/FQ/Scanned/20-2/spickerman.pdf)

第一次看到這個公式很錯愕,無理數和複數的和得到一個整實數,多麼神奇。

看到這裡的朋友一定很好奇算法怎麼實現。

其實該比內公式的後兩項對結果的影響非常小,只對Tn​的精度有非常小的影響,我們可以簡化成:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

這個符號表示對結果進行四捨五入。我實際測試的結果: 對n小於57的任意Tn​ 都不受影響。完全滿足題目要求

兩種算法的代碼如下:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

Java語言實現:

Java 的實現和C語言的實現一致,不再撰述。

代碼如下:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

Python語言實現:

Python 的實現和C語言的實現一致,不再撰述。

代碼如下:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

"
LeetCode基礎算法題第154篇:求第N個Tribonacci數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。

如果有任何問題可以在文章後評論或者私信給我。

如果有朋友希望我講些其他話題,請在評論區留言或者私信給我。

持續分享,敬請關注。

LeetCode 1137. 求第N個泰波拿契數(N-th Tribonacci Number)

問題描述:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

注:

  • 0 <= n <= 37;
  • 答案是一個32位整數,即。res <= 2^31 - 1;

示例:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

C語言實現:

泰波拿契數是斐波那契數的擴展。它的求法與求斐波那契數類似,但是要複雜一些。

方法一:遞歸或者循環

我們依然可以用循環或者遞歸,像求斐波那契數那樣求泰波拿契數。

我這裡只說遞歸方法,因為遞歸代碼要更簡潔一些。

一個泰波拿契數是它前面的3個數的和,所以對於前3個數(0,1,1)我們直接賦值,無需計算。

其他的則返回 tribonacci(n-3) + tribonacci(n-2) + tribonacci(n-1)。

但是這裡要注意,如果簡單的這樣處理,那麼會有大量的重複計算。當n增大,效率會迅速下降。

為了避免重複計算,對於已經計算過的數,要存起來,下次用的時候直接取。鑑於題目要求n不大於37,所以我們定義一個長度時38的數組T來保存這些數。

方法二:通項公式

在前面我講,如何求第n個斐波那契數時,我提到了用數列的通項公式一次求出。在這裡我們試著求出泰波拿契數的通項公式。

對於一個泰波拿契數數列,我們可以得出如下的關係:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

可以得到A的特徵方程:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

解這個一元三次方程得到它的3個解, α,β 和 γ :

其種 α 是唯一的實根,是一個無理數。

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

βγ 是兩個共軛複數根。

因此它的比內公式表示為:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

(篇幅有限,關於其比內公式的推導,見https://www.mscs.dal.ca/FQ/Scanned/20-2/spickerman.pdf)

第一次看到這個公式很錯愕,無理數和複數的和得到一個整實數,多麼神奇。

看到這裡的朋友一定很好奇算法怎麼實現。

其實該比內公式的後兩項對結果的影響非常小,只對Tn​的精度有非常小的影響,我們可以簡化成:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

這個符號表示對結果進行四捨五入。我實際測試的結果: 對n小於57的任意Tn​ 都不受影響。完全滿足題目要求

兩種算法的代碼如下:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

Java語言實現:

Java 的實現和C語言的實現一致,不再撰述。

代碼如下:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數

Python語言實現:

Python 的實現和C語言的實現一致,不再撰述。

代碼如下:

LeetCode基礎算法題第154篇:求第N個Tribonacci數

LeetCode基礎算法題第154篇:求第N個Tribonacci數


"

相關推薦

推薦中...