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

示意图:

cpp 复制代码
索引: 0  1  2  3  4
值:   0  1  1  2  4
               ↑  ↑
时间复杂度和空间复杂度
  • O(n): 需要从i=3计算到i=n,一共执行n-2次循环
  • 每次循环是常数时间操作(简单加法)
  • O(n): 需要一个长度为n+1的dp数组存储所有计算结果
代码
cpp 复制代码
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];
    }
};
相关推荐
冠位观测者10 小时前
【Leetcode 每日一题】2942. 查找包含给定字符的单词
算法·leetcode·职场和发展
轮到我狗叫了10 小时前
力扣小题, 力扣113.路径总和II力扣.111二叉树的最小深度 力扣.221最大正方形力扣5.最长回文子串更加优秀的算法:中心扩展算法
算法·leetcode·深度优先
黎明smaly10 小时前
【C语言】复习~数组和指针
c语言·开发语言·数据结构·c++·leetcode
2301_7665360515 小时前
刷leetcode hot100返航版--贪心5/23
算法·leetcode·职场和发展
姬公子52115 小时前
leetcode hot100刷题日记——11.相交链表
算法·leetcode·链表
小学生的信奥之路15 小时前
力扣509题:斐波那契数列的解法与代码注释
c++·算法·leetcode·动态规划·斐波那契数列
Tiny番茄15 小时前
贪心介绍 LeetCode 455.分发饼干 LeetCode 376. 摆动序列 LeetCode 53. 最大子序和
算法·leetcode·职场和发展
ThE.wHIte.15 小时前
leetcode 3068. 最大节点价值之和
算法·leetcode·职场和发展
鸡鸭扣15 小时前
leetcode hot100:十四、解题思路大全:真·大全!
数据结构·python·算法·leetcode·力扣·笔试
患得患失9491 天前
【算法】力扣体系分类
算法·leetcode·分类