泰波那契数列是斐波那契数列的扩展版本。在斐波那契数列中,下一项是前两项之和,而在泰波那契数列中,下一项是前三项的和。具体的定义是:
问题要求的是,给定一个整数
,返回第
个泰波那契数。

泰波那契数列是斐波那契数列的扩展版本。在斐波那契数列中,下一项是前两项之和,而在泰波那契数列中,下一项是前三项的和。具体的定义是:
问题要求的是,给定一个整数
,返回第
个泰波那契数。
根据泰波那契数列的定义:
项是
, 每一项都是前三项的和:
例如:
我们可以用动态规划来解决这个问题,通过递推公式一步步计算出结果。基本步䯅如下:
。
的情况,
。
开始,逐步计算到
,每一步只依赖前三个数值,所以我们可以优化空间复杂度。
在实现动态规划时,我们可以使用一个数组来保存每个泰波那契数,但实际上,计算第
项时只需要知道前三项的值。因此,我们可以用三个变量来代替数组,从而优化空间复杂度为
,而时间复杂度仍然为
。
,前面三项分别为
。
到
,每次使用前面的三个数值进行计算。
以上就是泰波那契数问题的基本思路。
class Solution:
def tribonacci(self, n: int) -> int:
# 特殊情况:直接返回前三个数的结果
if n == 0:
return 0
elif n == 1 or n == 2:
return 1
# 初始化前3个数:T(0), T(1), T(2)
t0, t1, t2 = 0, 1, 1
# 从第3项开始计算到第n项
for i in range(3, n + 1):
# 当前的泰波那契数是前三项的和
current = t0 + t1 + t2
# 更新前面的三个数
t0, t1, t2 = t1, t2, current
# 返回第n项
return t2,直接返回相应的结果。
分别表示
,在循环中逐步更新,直到计算到
。
,需要遍历计算到第
项。
,只使用了三个变量存储前面的值。
class Solution {
public:
int tribonacci(int n) {
// 特殊情况:直接返回前三个数的结果
if (n == 0) return 0;
if (n == 1 || n == 2) return 1;
// 初始化前3个数:T(0), T(1), T(2)
int t0 = 0, t1 = 1, t2 = 1;
// 从第3项开始计算到第n项
for (int i = 3; i <= n; ++i) {
// 当前的泰波那契数是前三项的和
int current = t0 + t1 + t2;
// 更新前面的三个数
t0 = t1;
t1 = t2;
t2 = current;
}
// 返回第n项
return t2;
}
};,直接返回结果。
,在每次循环中计算
并更新这三个变量。
, 遍历计算每一项。
,只使用了常量空间存储计算过程。
,可以快速从
逐步计算到第
项。