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

LeetCode - 1137.第N个泰波那契数

目录

题目

解法

动态规划解法

核心思想

执行流程

具体例子

时间复杂度和空间复杂度

代码


题目

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

解法

动态规划解法

核心思想

动态规划是一种通过将复杂问题分解为更小子问题来解决的算法方法。我将用第N个泰波那契数来演示这个概念。

泰波那契序列是斐波那契序列的变种,定义为:

  • T(0) = 0
  • T(1) = 1
  • T(2) = 1
  • T(n) = T(n-1) + T(n-2) + T(n-3) (n > 2)

动态规划的核心特点:

  1. 重叠子问题:相同子问题多次计算
  2. 最优子结构:问题的最优解包含子问题的最优解
  3. 状态转移:当前状态依赖于前面的状态
  4. 有明确的递推关系:T(n) = T(n-1) + T(n-2) + T(n-3)

通过存储已解决的子问题结果,动态规划避免了递归方法的重复计算,大大提高了效率。

执行流程
  • 边界条件处理:直接返回T(0)=0, T(1)=1, T(2)=1的结果
  • 创建DP表:建立大小为n+1的数组存储中间结果
  • 初始化:设置dp[0]=0, dp[1]=1, dp[2]=1
  • 状态转移:从i=3开始,使用公式dp[i] = dp[i-1] + dp[i-2] + dp[i-3]填表
  • 返回结果:dp[n]即为所求
具体例子

计算T(4)的过程:

  • 检查:n=4,不是边界情况
  • 创建dp表:dp[0...4]
  • 初始化:dp[0]=0, dp[1]=1, dp[2]=1
  • 填表:
    • i=3: dp[3] = dp[2] + dp[1] + dp[0] = 1 + 1 + 0 = 2
    • i=4: dp[4] = dp[3] + dp[2] + dp[1] = 2 + 1 + 1 = 4
  • 返回dp[4] = 4

示意图:

索引: 0  1  2  3  4
值:   0  1  1  2  4↑  ↑
时间复杂度和空间复杂度
  • O(n): 需要从i=3计算到i=n,一共执行n-2次循环
  • 每次循环是常数时间操作(简单加法)
  • O(n): 需要一个长度为n+1的dp数组存储所有计算结果
代码
class Solution {
public:int tribonacci(int n) {//1.创建dp表//2.初始化//3.填表//4.返回值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];}
};

http://www.xdnf.cn/news/266671.html

相关文章:

  • python入门(3)循环
  • 腾讯混元-DiT 文生图
  • Vue 3 Element Plus 浏览器使用例子
  • dstack 是 Kubernetes 和 Slurm 的开源替代方案,旨在简化 ML 团队跨顶级云、本地集群和加速器的 GPU 分配和 AI 工作负载编排
  • 大数据引领行业革命:深度解析与未来趋势
  • 接口测试——HTTP状态码
  • bellard.org‌ : QuickJS 如何使用 qjs 执行 js 脚本
  • 施磊老师rpc(三)
  • Docker安装Ollama及使用Ollama部署大模型
  • 二极管反向恢复的定义和原理
  • SQL语句--postgis语句(矢量数据的定义与操作)
  • REINFORCE蒙特卡罗策略梯度算法详解:python从零实现
  • STM32 DMA直接存储器存取
  • 解码响应式 Web 设计:原理、技术与优劣势全解析
  • C++代码随想录刷题知识分享-----142.环形链表II
  • 希洛激活器策略思路
  • n8n工作流自动化平台的实操:Cannot find module ‘iconv-lite‘
  • 生成式 AI 与 AI 的区别
  • DeepSeek实战--LLM微调
  • LeetCode算法题 (设计链表)Day16!!!C/C++
  • 「Mac畅玩AIGC与多模态16」开发篇12 - 多节点串联与输出合并的工作流示例
  • ipvsadm,是一个什么工具?
  • 中国 AIGC 确权革命:“AI 创意・中国” 平台上线,存证成本降至 0.1 元 / 件
  • CAN网桥中继隔离抗干扰集线器重映射一进一出CAN扩展CAN Bridge
  • 在Java项目中实现本地语音识别与热点检测,并集成阿里云智能语音服务
  • Dubbo(92)如何在微服务架构中应用Dubbo?
  • 深入理解C++类型转换:从基础到高级应用
  • 糖尿病筛查常识---秋浦四郎
  • 计网_可靠传输ARQ机制
  • neo4j初尝试