【题目】
泰波那契序列 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
提示:
0 <= n <= 37
答案保证是一个 32 位整数,即 answer <= 2^31 - 1。
【代码】
【方法1:dp】
class Solution:
def tribonacci(self, n: int) -> int:
a,b,c=0,1,1
for i in range(2,n):
a,b,c=b,c,a+b+c
return c if n else 0
【写法2:dp】
class Solution:
def tribonacci(self, n: int) -> int:
ans=[0,1,1]
for i in range(2,n):
ans.append(sum(ans[i-2:i+1]))
# print(ans)
return ans[n]
【方法3:快速幂】
class Solution:
def tribonacci(self, n: int) -> int:
if n == 0:
return 0
if n <= 2:
return 1
def multiply(a: List[List[int]], b: List[List[int]]) -> List[List[int]]:
c = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
for i in range(3):
for j in range(3):
c[i][j] = a[i][0] * b[0][j] + a[i][1] * b[1][j] + a[i][2] * b[2][j]
return c
def matrix_pow(a: List[List[int]], n: int) -> List[List[int]]:
ret = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
while n > 0:
if n & 1:
ret = multiply(ret, a)
n >>= 1
a = multiply(a, a)
return ret
q = [[1, 1, 1], [1, 0, 0], [0, 1, 0]]
res = matrix_pow(q, n)
return res[2][0]+res[2][1]