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

每日一练:【动态规划算法】斐波那契数列模型之第 N 个泰波那契数(easy)

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

1. 题目链接:1137. 第 N 个泰波那契数

2. 题目描述

3.题目分析

这题我们要求第n个泰波那契Tn的值,很明显的使用动态规划算法。

4.动态规划算法流程

1. 状态表示:

根据题目的要求及公式直接定义出状态表示:我们以第i个位置为结尾,dp表第i个位置的值表示第i个泰波那契的值。
 

2. 状态转移方程:

根据公式我们确定dp[i]的值或者状态通过状态表示方程表示是dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]

3. dp表初始化:

 从我们的递推公式可以看出, dp[i] 在i = 0 以及 i = 1 的时候是没有办法进行推导的,因
为 dp[-2] 或 dp[-1] 不是一个有效的数据。因此我们需要在填表之前,将 0, 1, 2 位置的值初始化。题目中已经告诉我们 dp[0] = 0, dp[1] = dp[2] = 1 ,我们按照题目的值初始化

4. 填表顺序:


要求dp[i]的值就要先确定dp[i - 1]、 dp[i - 2]、dp[i - 3]的值,因此dp表的填表顺序就是从左往右

5. 返回值:

题目要求第n个数的值,我们就应该返回 dp[n] 的值。

5.算法代码

class Solution {
public:
    int tribonacci(int n) {
        vector<int> dp(n + 1);
        if(n == 0) return 0;//对于n为0,1,2的特殊情况,我们需要处理一下防止越界
        if(n == 1 || n == 2) return 1;

        dp[0] = 0,dp[1] = 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];
    }
};

6.滚动数组优化:

我们发现在求解上述问题的过程中,我们只需要知道该位置前三的位置的值相加就行,因此开辟O(n)的空间消耗完全没有必要,我们使用滚动数组来进行优化(滚动数组只是一种形象的说法,并不一定是数组)

算法代码展示

class Solution {
public:
    int tribonacci(int n) {
        int a = 0,b = 1,c = 1,d = 0;
        if(n == 0) return 0;
        if(n == 1 || n == 2) return 1;

        for(int i = 3;i <= n;i++)
        {
            d = a + b + c;
            a = b;
            b = c;
            c = d;
        }

        return d;
    }
};


http://www.kler.cn/a/401777.html

相关文章:

  • python: generator IDAL and DAL using sql server 2019
  • Linux网络——套接字编程
  • ASP.NET MVC宠物商城系统
  • Windows docker下载minio出现“Using default tag: latestError response from daemon”
  • 【分布式技术】ES扩展知识-Elasticsearch分词器的知识与选择
  • gvim添加至右键、永久修改配置、放大缩小快捷键、ctrl + c ctrl +v 直接复制粘贴、右键和还原以前版本(V)冲突
  • 【白话机器学习系列】白话 Softmax
  • 自动驾驶系统研发系列—智能驾驶新高度:解析ESS驾驶员转向辅助系统
  • C++ STL中常见的容器
  • 面向FWA市场!移远通信高性能5G-A模组RG650V-NA通过北美两大重要运营商认证
  • CSS基础选择器与div布局
  • 社群在 2+1 链动模式 S2B2C 商城小程序社交新零售运营中的价值与应用
  • 【Go实战】:使用AES和RSA加密算法保护关键信息
  • 独立资源池:虚拟化技术如何帮助企业在经济危机中降低成本?
  • 我们来学mysql -- EXPLAIN之type(原理篇)
  • Swift 数组
  • 安装 Ubuntu 桌面系统
  • [论文阅读] 异常检测 Deep Learning for Anomaly Detection: A Review(三)总结梳理-疑点记录
  • iOS 键盘弹出视图精准上移
  • 深度解析FastDFS:构建高效分布式文件存储的实战指南(下)
  • qiankun主应用(vue2+element-ui)子应用(vue3+element-plus)不同版本element框架css样式相互影响的问题
  • Linux驱动开发快速入门——字符设备驱动(直接操作寄存器设备树版)
  • MySQL系统优化
  • 芯片之殇——“零日漏洞”(文后附高通64款存在漏洞的芯片型号)
  • css iframe标签使用
  • LeetCode - #138 随机链表的复制