首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【LeetCode】动态规划—第 N 个泰波那契数(附完整Python/C++代码)

【LeetCode】动态规划—第 N 个泰波那契数(附完整Python/C++代码)

作者头像
用户9613193
发布2026-06-16 20:09:28
发布2026-06-16 20:09:28
100
举报
动态规划—#1137. 第 N 个泰波那契数

  • 前言
  • 题目描述
  • 基本思路
    • 1. 泰波那契数列的定义:
    • 2. 理解递推关系:
    • 3. 解决方法:
    • 4. 进一步优化:
    • 5. 小总结:
  • 代码实现
    • Python3代码实现
    • Python 代码解释
    • C++代码实现
    • C++ 代码解释
  • 总结:

前言

泰波那契数列是斐波那契数列的扩展版本。在斐波那契数列中,下一项是前两项之和,而在泰波那契数列中,下一项是前三项的和。具体的定义是:

T(\theta)=\theta
T(1)=1
T(2)=1
  • 对于
n>=3, T(n)=T(n-1)+T(n-2)+T(n-3)

问题要求的是,给定一个整数

n

,返回第

n

个泰波那契数。

题目描述

在这里插入图片描述
在这里插入图片描述

基本思路

1. 泰波那契数列的定义:

泰波那契数列是斐波那契数列的扩展版本。在斐波那契数列中,下一项是前两项之和,而在泰波那契数列中,下一项是前三项的和。具体的定义是:

T(\theta)=\theta
T(1)=1
T(2)=1
  • 对于
n>=3, T(n)=T(n-1)+T(n-2)+T(n-3)

问题要求的是,给定一个整数

n

,返回第

n

个泰波那契数。

2. 理解递推关系:

根据泰波那契数列的定义:

\theta

项是

\theta: T(\theta)=0
  • 第1项是 1:
\mathrm{T}(1)=1
  • 第 2 项是
1: T(2)=1
  • 对于
n>=3

, 每一项都是前三项的和:

T(n)=T(n-1)+T(n-2)+T(n-3)

例如:

T(3)=T(2)+T(1)+T(\theta)=1+1+\theta=2
T(4)=T(3)+T(2)+T(1)=2+1+1=4
T(5)=T(4)+T(3)+T(2)=4+2+1=7

3. 解决方法:

我们可以用动态规划来解决这个问题,通过递推公式一步步计算出结果。基本步䯅如下:

  1. 初始条件:我们知道
T(0)=0 , T(1)=1 , T(2)=1

  1. 递推公式:对于
n>=3

的情况,

T(n)=T(n-1)+T(n-2)+T(n-3)

  1. 自底向上: 从
n=3

开始,逐步计算到

T(n)

,每一步只依赖前三个数值,所以我们可以优化空间复杂度。

4. 进一步优化:

在实现动态规划时,我们可以使用一个数组来保存每个泰波那契数,但实际上,计算第

n

项时只需要知道前三项的值。因此,我们可以用三个变量来代替数组,从而优化空间复杂度为

0(1)

,而时间复杂度仍然为

O(n)

5. 小总结:

  • 泰波那契数列的定义是:
T(n)=T(n-1)+T(n-2)+T(n-3)

,前面三项分别为

T(0)=0 , T(1)
=1, T(2)=1

  • 我们可以通过动态规划自底向上计算,从
T(3)

T(n)

,每次使用前面的三个数值进行计算。

  • 为了优化空间,我们可以使用常量空间的三个变量,避免使用数组。

以上就是泰波那契数问题的基本思路。

代码实现

Python3代码实现

代码语言:javascript
复制
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

Python 代码解释

  1. Base Case: 对于
n=0,1,2

,直接返回相应的结果。

  1. 动态规划: 使用三个变量
t 0, t 1, t 2

分别表示

T(n-3), T(n-2), T(n-1)

,在循环中逐步更新,直到计算到

T(n)

  1. 时间复杂度:
O(n)

,需要遍历计算到第

n

项。

  1. 空间复杂度:
O(1)

,只使用了三个变量存储前面的值。

C++代码实现

代码语言:javascript
复制
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;
    }
};

C++ 代码解释

  1. Base Case: 如果
n==0,1,2

,直接返回结果。

  1. 动态规划: 使用三个变量
t \theta, t 1, t 2

,在每次循环中计算

T(n)

并更新这三个变量。

  1. 时间复杂度:
O(n)

, 遍历计算每一项。

  1. 空间复杂度:
O(1)

,只使用了常量空间存储计算过程。


总结:

  • Python 和 C++ 代码均使用动态规划和常量空间进行优化,保证了时间和空间的效率。
  • 通过递推公式
T(n)=T(n-1)+T(n-2)+T(n-3)

,可以快速从

T(0), T(1), T(2)

逐步计算到第

n

项。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 动态规划—#1137. 第 N 个泰波那契数
  • 前言
  • 题目描述
  • 基本思路
    • 1. 泰波那契数列的定义:
    • 2. 理解递推关系:
    • 3. 解决方法:
    • 4. 进一步优化:
    • 5. 小总结:
  • 代码实现
    • Python3代码实现
    • Python 代码解释
    • C++代码实现
    • C++ 代码解释
  • 总结:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档