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

news2024/11/23 19:25:31

1. 题目

泰波那契序列 Tn 定义如下: 

T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2

给你整数 n,请返回第 n 个泰波那契数 Tn 的值。

2. 示例

3. 分析

1. 状态表示:dp[i]表示:第i个泰波那契数的值

2. 状态转移方程:题目已经给了,为 Tn+3 = Tn + Tn+1 + Tn+2,修改一下为:dp[i] = dp[i-1] + dp[i-2] + dp[i-3]

3. 初始化:题目也已经给了,为 T0 = 0, T1 = 1, T2 = 1,修改一下为:dp[0] = 0,  dp[1] = d[2] = 1

4.填表顺序:填写一个状态时,需知道表里前三个的状态,所以根据方程可知填dp表的顺序就为 从左至右


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];
    }
}

我们可以优化一下:我们不难发现对于dp[i]的值,我们只需用到前三个的值就可以了,并不需要前三个之前的值。例如dp[6]=dp[5]+dp[4]+dp[3],我们求dp[6]时是不需要用到dp[0]、dp[1]、dp[2]的,即dp[0]、dp[1]、dp[2]对于dp[6]是可以舍弃掉的。

结论:求某个状态时,仅需要有效的状态,对于不用的就可以舍弃掉。

我们就可以使用滚动数组进行优化。我们使用abcd四个变量分别进行赋值 a = 0, b = 1, c = 1, d = 0,然后在这个数组内一步一步走就可以了。

怎么走呢?交换彼此的值就行,有两种交换选项:

  1. 从左往右走: a = b, b = c, c = d 为正确走法
  2. 从右往左走:c = d, b = c, a = b
    错误走法:c = d再b = c后,b的值就为d了,而不是还没交换前的c了。
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;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1512669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安装配置Redis

Redis是一个key-value存储系统。和Memcached类似&#xff0c;它支持存储的value类型相对更多&#xff0c;包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash&#xff08;哈希类型&#xff09;。这些数据类型都支持push/pop、add/remove及取交集并…

【网络原理】TCP 协议中比较重要的一些特性(二)

目录 1、TCP 状态转换 1.1、三次握手状态 1.2、四次挥手状态 2、滑动窗口 3、流量控制 1、TCP 状态转换 TCP 状态和“线程状态”是类似的概念&#xff0c;用于描述 TCP 连接过程中正在执行什么操作。 TCP 服务器和客户端都有一定的数据结构来保存连接信息&#xff0c;而…

字节跳动后端工程师实习生笔试题-c++

字节跳动后端工程师实习生笔试题链接 笔试题 1. 最大映射2. 木棒拼图3. 魔法权值4. 或与加 1. 最大映射 有 n 个字符串&#xff0c;每个字符串都是由 A-J 的大写字符构成。现在你将每个字符映射为一个 0-9 的数字&#xff0c;不同字符映射为不同的数字。这样每个字符串就可以看…

[WUSTCTF2020]朴实无华

查看robots.txt 找到/fAke_flagggg.php 显然这是个假的flag&#xff0c;但是我们在header处发现了fl4g.php 近来发现中文全部变成了乱码 插件转成utf8后正常显示 <?php header(Content-type:text/html;charsetutf-8); error_reporting(0); highlight_file(__file__);//leve…

LeetCode - 和为K的子数组

LCR 010. 和为 K 的子数组 看到这道题的时候&#xff0c;感觉还挺简单的&#xff0c;找到数组中和为k的连续子数组的个数&#xff0c;无非就是一个区间减去另一个区间的和等于k&#xff0c;然后想到了用前缀和来解决这道问题。再算连续子数组出现的个数的时候&#xff0c;可以使…

汽车大灯汽车尾灯破裂裂纹破损破洞掉角崩角等问题能修复吗?修复后灯罩颜色和之前相比有什么变化?

答案是肯定的&#xff0c;汽车大灯汽车尾灯破裂裂纹破损破洞掉角崩角等问题是可以修复的。 修复后的汽车灯罩颜色可能会与之前有所不同&#xff0c;这主要取决于修复的方法和使用的材料。 首先&#xff0c;如果修复过程中使用了喷漆翻新&#xff0c;那么灯罩的颜色可能会与原来…

学习笔记-华为IPD转型2020:1,IPD的重要意义

华为产品开发转型&#xff1a;IPD计划 大多数公司发现&#xff0c;当公司大幅增长时&#xff0c;在较小规模上有效的管理实践不再有效。产品开发过程也是如此。随着华为的发展&#xff0c;该公司遇到了产品故障率更高、开发周期更长和研发成本增加等问题。然后&#xff0c;它转…

基于GIS技术的智慧农业大数据平台解决方案

1.建设背景 国务院促进大数据发展纲要 纲要提出大力推动政府信息系统和公共数据互联开放共享&#xff0c;加快政府信息平台整合&#xff0c;推动数据资源整合&#xff0c;提升治理水平。按照“五个统一”建设“大平台“&#xff0c;融合“大数据”&#xff0c;构建“大系统”落…

C语言sizeof操作符与strlen函数

1.sizeof与strlen的介绍 (1).sizeof 计算变量的内存空间大小。底层实际上是对变量类型的计算。是一个单目操作符&#xff0c;不是函数&#xff0c;后面的括号可以省略 (2).strlen 函数原型 strlen是一个函数&#xff0c;返回的size_t类型的数据,头文件为string.h计算字符串…

运维自动化之——Ansible

一、自动化运维 1、通过xshell实现自动化运维 xshell提供会话窗口同步发送命令功能&#xff0c;但是必须将多台机器同时通过xshell窗口连接然后输入命令&#xff0c;如下点击xshell的工具---发送输入--到所有窗口或者指定窗口。 2、Ansible简介 Ansible是基于模块工作的&…

TSINGSEE青犀视频AI方案:数据+算力+算法,人工智能的三大基石

背景分析 随着信息技术的迅猛发展&#xff0c;人工智能&#xff08;AI&#xff09;已经逐渐渗透到我们生活的各个领域&#xff0c;从智能家居到自动驾驶&#xff0c;从医疗诊断到金融风控&#xff0c;AI的应用正在改变着我们的生活方式。而数据、算法和算力&#xff0c;正是构成…

安装Android Studio遇到Unable to access Android SDK add-on list的错误

第一次安装android studio的时候&#xff0c;提示&#xff1a;unable to access Android sdk add-on list 解决办法 这个错误一般是android studoi代理没有设置导致的&#xff0c;需要在setting里面设置&#xff1a; 点击Android Studio - Preferences&#xff0c;在 Appeara…

开源导出html表格项目-easyHtml

开源导出html表格项目-easyHtml 背景介绍 背景 项目的由来&#xff0c;在面试的过程中&#xff0c;发现这个需求&#xff08;导出html表格&#xff09;比较常见&#xff0c;同时也引起我的兴趣&#xff0c;所以就有了开源项目easyHtml第一个版本 介绍 功能 支持自定义表格标…

算法-图的存储,图的转置,拓扑排序

1.图的存储 图用来对关系建模&#xff0e;图是节点和边构成的集合&#xff0e;节点反映图的元素集合&#xff0c;边反映图的元素集合中元素间的关系&#xff0e; 上述是由五个节点&#xff0c;三条边构成的结构&#xff0e;我们可以用图对其建模&#xff0e; 对由节点&#x…

TeXLive 2023+TeXstudio下载与安装

一. TeXLive 2023下载与安装 TeX Live 是一种 Tex 语言的发行版本,就是相当于 C 语言的编辑(VisualC++),但是这种编辑器的操作方式比较复杂,需要在 cmd 中输入命令操作,没有软件界面,而 Texstudio 正好解决了这个问题。清华大学镜像文件:https://mirrors.tuna.tsinghua…

Linux内核有什么之块设备驱动有什么第二回 —— 块设备驱动初始化流程 vs 字符设备驱动初始化流程

接前一篇文章&#xff1a;Linux内核有什么之块设备驱动有什么第一回 —— 概述及框架 本文内容参考&#xff1a; 34 | 块设备&#xff08;上&#xff09;&#xff1a;如何建立代理商销售模式&#xff1f;-趣谈Linux操作系统-极客时间 Linux内核——块设备总结_linux do_open-…

探索人工智能的现状与未来:机遇与挑战

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 正文 人工智能的现状 人工智能的应用领域 人工智能的未来 人工智能面临的挑战 我的其他博客 正文 人工智能&#xff08;AI&#xff09…

空间计算综合指南

空间计算&#xff08;spatial computing&#xff09;是指使人类能够在三维空间中与计算机交互的一组技术。 该保护伞下的技术包括增强现实&#xff08;AR&#xff09;和虚拟现实&#xff08;VR&#xff09;。 这本综合指南将介绍有关空间计算所需了解的一切。 你将了解 AR、VR…

【yolov8和yolov5】用命令快速着手训练

文章目录 1.yolov81.1.创建conda环境1.2.下载代码和环境1.3.YOLOv8训练、自测和预测的代码及解释1.3.1. YOLOv8 训练代码&#xff1a;1.3.2.yolov8 自测代码&#xff1a;1.3.3.yolov8 推理代码&#xff1a;1.3.4.注意&#xff1a; 2.yolov52.1.创建conda环境2.2.下载代码和环境…

在项目管理中,如何更好地协同团队成员,提高团队合作效率?

在项目管理中&#xff0c;协同团队成员并提高团队合作效率是确保项目成功实施的关键。以下是一些建议&#xff0c;有助于更好地协同团队成员&#xff0c;提高团队合作效率&#xff1a; 一、明确角色与责任 为每个团队成员分配明确的角色和职责&#xff0c;通过制定详细的任务…