当前位置: 首页 > news >正文

动态规划-1137.第N个泰波那契数-力扣(LeetCode)

一、题目解析

结合示例我们需要得出第i个泰波那契数的大小,由此我们能得出状态表示,dp[i]表示:第i个泰波那契数。

二、算法解析

根据题目要求我们得出了状态表示,对题目提供的定义式稍作变形就能得到状态转移方程。

原式为:Tn+3 = Tn + Tn+1 + Tn+2,将i替换n,并对下标减3

得到状态转移方程:Ti = Ti-1+ Ti-2 + Ti-3

初始化:根据题目我们需要初始化dp[0] = 0,dp[1] = dp[2] = 1即可,其余的可以通过定义式计算出来。

填表的顺序:例先填dp[4],dp[4] = dp[3] + dp[2] + dp[1],为了避免所需的状态未计算,所以从3开始从左到右依次填入数据进dp表中。

返回值:根据题目,我们只需要返回dp[i]的值即可。 

老规矩,先根据上面的解析去自己实现,链接:1137. 第 N 个泰波那契数 - 力扣(LeetCode)

 三、代码示例

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;for(int i = 3;i<=n;i++) dp[i] = dp[i-1] + dp[i-2] + dp[i-3];return dp[n];}
};

我们能知道时间复杂度是O(1),空间复杂度是O(N),下面我们可以用滚动数组对其进行优化,使其空间复杂度为O(1).

四、空间优化

 只需要在刚才代码的基础上,略加修改即可。

代码示例

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,d = 0;//空间优化for(int i = 3;i<=n;i++){d = a + b + c;a = b;//赋值更新数据b = c;c = d;}return d;}
};

看到最后,如果对您有所帮助还请留下免费的点赞和收藏把!我们下期再见! 

相关文章:

  • 启发式算法-蚁群算法
  • <property name=“userDao“ ref=“userDaoBean“/> 这两个的作用和语法
  • 第15章 对API的身份验证和授权
  • MySQL 空值处理函数对比:IFNULL、COALESCE 和 NULLIF
  • 基于Vue2 + Element 实现任务列表管理功能的详细教程
  • 用Maven定位和解决依赖冲突
  • Dart和Go语言特征对比
  • KeyPresser 一款自动化按键工具
  • 用Suno V4.5试了一下1850字的歌词进行创作出来了6分钟的歌曲
  • 计算机视觉与深度学习 | 视觉里程计算法综述(传统+深度)
  • 计算机视觉与深度学习 | 什么是图像金字塔?
  • 聊一聊自然语言处理在人工智能领域中的应用
  • MCP 协议知识分享指南
  • Swift:重构开发范式的现代编程语言
  • 【原创】风云扫描王[特殊字符]OCR识别翻译!证件照
  • AWS上构建基于自然语言和LINDO API的线性规划与非线性规划的优化计算系统
  • 欧拉计划 Project Euler64(奇周期平方根)题解
  • 饱和蒸汽再生数据采集挥发性有机物(VOCs)吸附脱附实验装置
  • 跨语言信息捕手:基于HMM的多语言命名实体识别实战
  • 黑客学习计划
  • 李在明涉嫌违反《公职选举法》案将于15日进行首次重审公审
  • 竞彩湃|德甲保级白热化,都灵主帅直面旧主
  • 2025财政观察①长三角罚没收入增速放缓,24城仍在上涨
  • 武汉大学新闻与传播学院已由“80后”副院长吴世文主持工作
  • 从“长绳系日”特展看韩天衡求艺之路
  • 解放日报:让算力像“水电煤”赋能千行百业