題目描述
泰波那契序列 tn 定義如下:
t0 = 0, t1 = 1, t2 = 1, 且在 n >= 0 的條件下 tn+3 = tn + tn+1 + tn+2
給你整數 n,請返回第 n 個泰波那契數 tn 的值。
輸入:n = 4
輸出:4
解釋:t_3 = 0 + 1 + 1 = 2
t_4 = 1 + 1 + 2 = 4
示例 2:
輸入:n = 25
輸出:1389537
0 <= n <= 37
答案保證是乙個 32 位整數,即 answer <= 2^31 - 1。
題解
主程式
public
class
tribonaccic
}
①我自己寫的,執行超時了,無法在力扣提交,因為重複計算了
class
solution
else
if(n==1)
else
if(n==2)
else
}}
1389537
②下面是在討論區找到的**
class
solution2
if(n ==
1|| n ==2)
int result =0;
int a =0;
int b =1;
int c =1;
for(
int i =
3; i <= n; i++
)return result;
}}
1389537
③尾遞迴
public
static
inttri
(int n,
int res1,
int res2,
int res3)
return
tri(n -
1, res2, res3, res1 + res2 + res3)
;}
1389537
④直接用遞迴的話會超時,所以應該減小遞迴的次數,對於通項公式進一步推導
t(n+3) = t(n+2) + t(n+1) +t(n+0)
t(n+4) = t(n+3) + t(n+2) + t(n+1)
兩者相減
t(n+4) - t(n+3) = t(n+3) - t(n)
移項可得t(n+4) = 2t(n+3) - t(n)
故有t(n) = 2t(n-1) - t(n-4)
public
static
inttribonacci2
(int n)
}
1389537
class
solution3
return prev;
}}
1389537
class
solution4
else
if(n ==1)
else
if(n ==2)
else
;for
(int i =
3; i <= n; i++
)return array[n %3]
;}}}
1389537
⑦動態規劃
class
solution5
return f[n];}
}
1389537
⑧遞迴加dp
題目給出了遞推式,很容易想到用自頂向下的遞迴寫法,把遞迴式改為:tn = tn-3 + tn-2 + tn-1
但是一提交發現超時,原因是這個遞推式用到了前三項的和,而每次求前三項的時候都是從頭開始遞迴求,顯然做了很多重複操作。
所以用到了dp陣列訪問之前求過的結果,當下次要的時候直接取
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...
遞迴2 第 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...
求第n個斐波拉契數
首先介紹斐波那契數列,斐波那契數列的排列是 1,1,2,3,5,8,13,21,34,55,89,144 依次類推下去,你會發現,它後乙個數等於前面兩個數的和。在這個數列中的數字,就被稱為斐波那契數。如果要找出其中任意乙個數,可以用下面兩種演算法解決 用遞迴法 define crt secure n...