首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >动态规划 —— 斐波那契数列模型-第 N 个泰波那契数

动态规划 —— 斐波那契数列模型-第 N 个泰波那契数

作者头像
迷迭所归处
发布2024-11-19 17:14:55
发布2024-11-19 17:14:55
1700
举报
文章被收录于专栏:动态规划动态规划

1. 第 N 个泰波那契数

题目链接: 1137. 第 N 个泰波那契数 - 力扣(LeetCode)

https://leetcode.cn/problems/n-th-tribonacci-number/

Tn+3 = Tn + Tn+1 + Tn+2 可以转换为 Tn = Tn-3 + Tn-2 + Tn-1

由上图可以看出T3等于T0+T1+T2,T4=T1+T2+T3以此类推后面的数


2. 算法原理

1. 状态表示:dp表里的值所代表的含义

本题状态表式是:第i个泰波那契数的值(先根据画的图来看(第i个,最后返回值按照题目的要求来))

2.状态转移方程 本题的状态转移方程 就是 dp[i]等于什么 :dp[i] = dp[i-1] + dp[i-2] + dp[i-3]

3. 初始化:把dp表填满不越界 如何填表:就是根据前面的状态转移方程来进行填表 比如:如果我们想要填dp[4]的值,那么我们只需要知道前面3个dp的值再相加就行了

不越界就是:如果我们想要填dp[0]的值,那么我们就需要dp[0]前3个dp的值相加,那么就会造成越界访问的问题,还有题目的数据范围

本题的初始化就是:dp[0] = 0 ; dp[1] = dp[2] = 1 ;

4. 填表顺序 本题的填表顺序是:从左到右

5. 返回值 :题目要求 + 状态表示 本题的返回值是:直接返回dp[n]


3. 代码

动态规划的固定四步骤:1. 创建一个dp表 2. 在填表之前初始化 3. 填表(填表方法:状态转移方程) 4. 确定返回值

代码语言:javascript
复制
class Solution {
public:
    int tribonacci(int n) {
        //先处理一下边界问题
        if(n==0) return 0;
        if(n==1 || n==2) return 1;
        vector<int>dp(n+1);
        dp[0]=0;
        dp[1]=dp[2]=1;
        //前三个题目已经初始化好了,从dp[3]开始初始化
        for(int i=3;i<=n;i++)
            dp[i] = dp[i-1] + dp[i-2] + dp[i-3];
            return dp[n];
    }
};

感谢观看~

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 第 N 个泰波那契数
  • 2. 算法原理
  • 3. 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档