1137 第 N 個泰波那契數(迭代 記憶性遞迴)

2021-10-23 15:51:23 字數 1550 閱讀 7880

1. 問題描述:

泰波那契序列 tn 定義如下: 

t0 = 0, t1 = 1, t2 = 1, 且在 n >= 0 的條件下 tn+3 = tn + tn+1 + tn+2,給你整數 n,請返回第 n 個泰波那契數 tn 的值。

示例 1:

輸入:n = 4

輸出:4

解釋:t_3 = 0 + 1 + 1 = 2

t_4 = 1 + 1 + 2 = 4

示例 2:

輸入:n = 25

輸出:1389537

2. 思路分析:

這道題目與斐波那契數列的的解決方法是一樣的,可以使用迭代與記憶性的遞迴來解決,可以使用三個變數進行迭代即可,記憶性的遞迴可以使用乙個列表來進行記錄中間的結果,當遞迴到之前求解過的值之後那麼就直接返回而不是繼續往下進行遞迴了,我們使用記憶性的遞迴的時候肯定是從n 比較大往小的方向進行直到n減到0或者是1或者是2的時候就停止遞迴了(因為這樣才可以求解出對應的結果),可以從簡單的例子來進行理解,比如求解t3,那麼肯定是要求解出t0, t1, t2,對於t4也是一樣的,所以可以輕鬆得到遞迴的式子為tn = tn - 1 + tn - 2 + tn - 3(n >= 3)當n = 0, 1, 2的時候直接返回對應的結果即可,我們在求解的過程中可以將求解過的值放入到列表中,這樣可以避免對於相同的n進行重複的遞迴

3. **如下:

迭代:

class solution:

def tribonacci(self, n: int) -> int:

if n == 0: return 0

t0, t1, t2 = 0, 1, 1

for i in range(n - 2):

t0, t1, t2 = t1, t2, t0 + t1 + t2

return t2

記憶性遞迴:

from typing import list

class solution:

# 記憶性的遞迴

def tribonacci(self, n: int) -> int:

nums = [0 for i in range(38)]

nums[1], nums[2] = 1, 1

def recursion(k: int, nums: list[int]) -> int:

if k == 0: return 0

if k == 1 or k == 2: return 1

if nums[k]: return nums[k]

nums[k] = recursion(k - 1, nums) + recursion(k - 2, nums) + recursion(k - 3, nums)

return nums[k]

return recursion(n, nums)

LeetCode 1137 第 N 個泰波那契數

泰波那契序列 tn 定義如下 t0 0,t1 1,t2 1,且在 n 0 的條件下 tn 3 tn tn 1 tn 2 給你整數 n,請返回第 n 個泰波那契數 tn 的值。示例 1 輸入 n 4 輸出 4 解釋 t 3 0 1 1 2 t 4 1 1 2 4 示例 2 輸入 n 25 輸出 138...

力扣 1137 第 N 個泰波那契數

泰波那契序列 tn 定義如下 t0 0,t1 1,t2 1,且在 n 0 的條件下 tn 3 tn tn 1 tn 2 給你整數 n,請返回第 n 個泰波那契數 tn 的值。示例 1 輸入 n 4 輸出 4 解釋 t 3 0 1 1 2 t 4 1 1 2 4 示例 2 輸入 n 25 輸出 138...

5139 第 N 個泰波那契數

泰波那契序列 tn 定義如下 t0 0,t1 1,t2 1,且在 n 0 的條件下 tn 3 tn tn 1 tn 2 給你整數 n,請返回第 n 個泰波那契數 tn 的值。示例 1 輸入 n 4輸出 4 解釋 t 3 0 1 1 2t 4 1 1 2 4示例 2 輸入 n 25輸出 1389537...