前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【动态规划:斐波那契数列模型】第 N 个泰波那契数

【动态规划:斐波那契数列模型】第 N 个泰波那契数

作者头像
利刃大大
发布2025-05-30 08:48:16
发布2025-05-30 08:48:16
10200
代码可运行
举报
文章被收录于专栏:csdn文章搬运csdn文章搬运
运行总次数:0
代码可运行

1、第 N 个泰波那契数(easy)

1137. 第 N 个泰波那契数

泰波那契序列 Tn 定义如下:

​ T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2。给你整数 n,请返回第 n 个泰波那契数 Tn 的值。

示例 1:

代码语言:javascript
代码运行次数:0
运行
复制
输入:n = 4
输出:4
解释:
T_3 = 0 + 1 + 1 = 2
T_4 = 1 + 1 + 2 = 4

示例 2:

代码语言:javascript
代码运行次数:0
运行
复制
输入:n = 25
输出:1389537

提示:

  • 0 <= n <= 37
  • 答案保证是一个 32 位整数,即 answer <= 2^31 - 1

因为这是我们接触到的第一道动态规划题,所以要先知道一些概念,也就是动态规划的算法原理,它可以说分为以下几个步骤:

  1. 状态表示:简单地说,就是 dp[i] 表示什么!
    • 题目要求
    • 经验(多刷题)+ 题目要求
    • 分析问题过程中发现重复子问题
  2. 状态转移方程:简单地说,就是 dp[i] 如何通过已知的状态得到!
  3. 初始化
  4. 填表
  5. 返回值

​ 其中最重要的就是第一点,因为我们解题之前必须先搞清楚要的是什么一个状态,而最难的其实是第二点,得到状态转移方程,得到这个方程之后,基本这道题就解决了!

​ 除此之外还有一个步骤就是空间优化,这个只会在我们这道题和后面的背包问题会涉及到,因为最重要的不是空间优化,而是理解如何得到状态方程!

解题思路

​ 对于这道题,其实是不难的,首先确定我们的状态,这里只需要一维状态表即可,也就是一维数组,起名叫做 dp 吧,以后都是这样子的!

​ 对于这个状态表示,dp[i] 不用说,很明显表示第 i 个泰波那契数!

​ 对于状态转移方程,这道题直接给出了,所以说这道题不难,但是我们写成转移方程的时候一般都用 dp[i] 来表示,而不是题目中的 dp[i+3] 这样子,所以方程就是 dp[i] = dp[i-1] + dp[i-2] + dp[i-3]

代码语言:javascript
代码运行次数:0
运行
复制
class Solution {
public:
    int tribonacci(int n) {
        // 创建dp表
        int dp[38];

        // 初始化
        dp[0] = 0;
        dp[1] = dp[2] = 1;

        // 通过状态转移方程填表
        for(int i = 3; i <= n; ++i)
        {
            dp[i] = dp[i-1] + dp[i-2] + dp[i-3];
        }

        // 返回值
        return dp[n];
    }
};

​ 至于空间优化,其实很明显吧,因为每次其实我们用到的就是三个变量来推导,所以我们只需要用三个状态变量,加上一个结果变量来进行状态转移即可,就不用去开辟数组了,节省了空间,只不过要注意的是赋值顺序不要搞错了!

代码语言:javascript
代码运行次数:0
运行
复制
class Solution {
public:
    int tribonacci(int n) {
        // 特殊情况
        if(n == 0)
            return 0;
        if(n == 1 || n == 2)
            return 1;

        // 初始化
        int a = 0, b = 1, c = 1, ret = 0;

        // 通过状态转移方程填表
        for(int i = 3; i <= n; ++i)
        {
            ret = a + b + c;
            a = b;
            b = c;
            c = ret;
        }

        // 返回值
        return ret;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、第 N 个泰波那契数(easy)
    • 解题思路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档