1137 第 N 个泰波那契数 tribonacci
2024/09/04
posted in
Leetcode
2024/09/04
posted in
Leetcode
Tag: 递归/dp,数组
泰波那契序列 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。
在二叉搜索树中寻找大于L及小于R的节点值的和。
已知树为BST,根据BST的特征:左子节点的值<当前节点的值<右子节点的值。
使用递归,记录初始条件,从顶向下递归。
class Solution:
def tribonacci(self, n: int) -> int:
if n == 0:
return 0
if n == 1:
return 1
if n == 2:
return 1
return self.tribonacci(n-1) + self.tribonacci(n-2) + self.tribonacci(n-3)
结果超时,用Dict优化:
好处:对于重复的子问题不需要重复计算
class Solution:
def __init__(self):
self.Dict = {}
def tribonacci(self, n: int) -> int:
if n == 0:
return 0
if n == 1:
return 1
if n == 2:
return 1
if n in self.Dict:
return self.Dict[n]
self.Dict[n] = self.tribonacci(n-1) + self.tribonacci(n-2) + self.tribonacci(n-3)
return self.Dict[n]
先解决简单问题,得到局部解,在网上递推得出全局解。
当前位置值为前三个值的和,需要创建三个变量在遍历时保存前三个值。
class Solution:
def tribonacci(self, n: int) -> int:
if n == 0:
return 0
if n == 1:
return 1
if n == 2:
return 1
T0 = 0
T1 = 1
T2 = 1
cur = 0
for i in range(2, n):
cur = T0+T1+T2
T0 = T1
T1 = T2
T2 = cur
return cur