【力扣】1137. 第n个泰波那契数

devtools/2024/9/18 6:52:18/ 标签: 动态规划, dp, 滚动数组, leetcode

原题链接:. - 力扣(LeetCode)

目录

1. 题目描述

2. 思路分析

3. 代码实现


1. 题目描述

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

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

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

示例 1:

输入:n = 4
输出:4
解释:
T_3 = 0 + 1 + 1 = 2
T_4 = 1 + 1 + 2 = 4

示例 2:

输入:n = 25
输出:1389537

提示:

  • 0 <= n <= 37
  • 答案保证是一个 32 位整数,即 answer <= 2^31 - 1

2. 思路分析

dp

1. 状态表示dp[i]表示第i个泰波那契数的值。(状态表示就是是什么的意思,也就是dp表里面的值所表示的含义

2. 状态转移方程dp[i]=dp[i-3]+dp[i-2]+dp[i-1]  (将 n-3代入题目给的 Tn+3 = Tn + Tn+1 + Tn+2 这个式子得到)

3. 初始化dp[0]=0,dp[1]=dp[2]=1(这一步是为了保证填dp表的时候不越界)

4. 填表顺序:从左向右(为了填写当前状态的时候,所需要的状态计算过了)

5. 返回值:因为题目要求的是第n个泰波那契数,所以返回dp[n]即可

空间优化——使用滚动数组

我们求dp[4]时,只需要知道dp[1],dp[2],dp[3]的值即可,此时dp[0]这个元素的空间相当于浪费了;同理我们求dp[5]时,只需要知道dp[2],dp[3],dp[4]这三个元素,此时dp[0]和dp[1]这两个元素的空间相当于浪费了。此时我们就可以用滚动数组进行优化,滚动数组也可以运用到dp中经典的背包问题。

3. 代码实现

处理一些边界情况

1. 创建dp

2. 初始化

3. 填表

4. 返回值

class Solution {
public:int tribonacci(int n) {if(n==0) return 0;  //处理一些边界情况if(n==1||n==2) return 1;vector<int> dp(n+1);  //创建dpdp[0]=0,dp[1]=dp[2]=1; //初始化for(int i=3;i<=n;i++){ //填表dp[i]=dp[i-3]+dp[i-2]+dp[i-1];}return dp[n];  //返回值}
};

使用滚动数组进行空间优化后的代码

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.ppmy.cn/devtools/37694.html

相关文章

Java使用csv导出多字段大数据文件(无需写实体映射,自动遍历)

csv工具类CsvUtils 此处使用LinkedHashMap链表哈希表&#xff0c;实现键值中值为空时仍存在数据以及保证顺序与sql顺序一致。 package com.xxx.xxx.utils;import lombok.val; import org.springframework.util.CollectionUtils; import javax.servlet.http.HttpServletRespons…

uniapp的app端软件更新弹框

1&#xff1a;使用html PLUS实现&#xff1a;地址HTML5 API Reference (html5plus.org)&#xff0c;效果图 2&#xff1a;在app.vue的onLaunch生命周期中&#xff0c;代码如下&#xff1a; onLaunch: function() {let a 0let view new plus.nativeObj.View(maskView, {backg…

Unity Shader中获取像素点深度信息

1.顶点着色器中对深度进行计算 v2f vert(appdata v) {v2f o;o.pos UnityObjectToClipPos(v.vertex);o.uv TRANSFORM_TEX(v.uv, _MainTex);o.depth (o.pos.z / o.pos.w 1.0) * 0.5; // Normalize depth to [0, 1]return o; }但是达不到预期&#xff0c;最后返回的值一直大于…

算法训练营day32

零、买卖股票的最佳时机 每次持股一股&#xff0c;只能买卖一次 计算利润 price - cost日期是不断推进的cost(花费) min 选取最小的股价profit利润&#xff0c;max(profit, price - cost) class Solution {public int maxProfit(int[] prices) {int cost Integer.MAX_VALUE…

sql优化思路

sql的优化经验 这里解释一下SQL语句的优化的原理 1.指明字段名称&#xff0c;可以尽量使用覆盖索引&#xff0c;避免回表查询&#xff0c;因此可以提高效率 2.字面意思&#xff0c;无需过多赘述。索引就是为了提高查询效率的。 3.图中两条sql直接可以使用union all 或者 uni…

R语言:卡方检验

χ2检验&#xff08;Chi-Square Test&#xff09;是一种用于检验分类变量之间是否存在相关性的统计方法。χ2检验的原理基于观察到的频数与期望频数之间的偏差来判断分类变量之间是否存在显著的关联。 χ2检验的原理可以概括为以下几个步骤&#xff1a; 建立假…

使用Vue3开发项目,搭建Vue cli3项目步骤

1.打开cmd &#xff0c;输入 vue create neoai遇到这样的问题 则需要升级一下电脑上 Vue Cli版本哈 升级完成之后 再次输入命令&#xff0c;创建vue3项目 vue create neoai安装完成后&#xff0c;输入 npm run serve 就可以运行项目啦~ 页面运行效果

如何使用低代码快速创建一个复杂交叉报表?

前言 在当今数字化时代&#xff0c;数据是企业决策和发展的重要支柱。为了更好地理解和利用数据&#xff0c;生成清晰、全面的报表至关重要。而复杂交叉报表作为一种高级数据分析工具&#xff0c;能够帮助企业深入挖掘数据背后的价值&#xff0c;提供全面的数据概览和分析结果…

扭蛋机小程序在互联网浪潮中的崛起与发展

随着互联网的快速发展&#xff0c;各种线上娱乐方式层出不穷&#xff0c;其中扭蛋机小程序凭借其独特的魅力&#xff0c;在互联网浪潮中迅速崛起并发展壮大。扭蛋机小程序不仅打破了传统扭蛋机的地域限制和操作不便&#xff0c;还融入了丰富的互动元素和便捷性&#xff0c;满足…

python作业

题目 分析 步骤&#xff1a; 判断先画空格还是数字 当有n层时&#xff0c;第i层有多少个空格第i层的起始数字是几&#xff0c;结尾是几&#xff0c;即数字取值范围当有n层时&#xff0c;第i层有多少个数字 代码 模式A n int(input("请输入行数:")) for i in range(…

如何创建一个 Django 应用并连接到数据库

简介 Django 是一个用 Python 编写的免费开源的 Web 框架。这个工具支持可扩展性、可重用性和快速开发。 在本教程中&#xff0c;您将学习如何为一个博客网站建立与 MySQL 数据库的初始基础。这将涉及使用 django-admin 创建博客 Web 应用程序的骨架结构&#xff0c;创建 MyS…

在线教育系统怎么样的呢,音乐培训班学习音乐基本要求有哪些?

现在高考已经不仅仅是学科类就可以&#xff0c;还可以艺术类进行报考&#xff0c;音乐就是艺术类的一种&#xff0c;很多人学音乐都是为了报考更好的院校&#xff0c;音乐机构也越来越多&#xff0c;那培训班学习音乐基本要求有哪些&#xff1f; 一、基础乐理 音乐理论也称乐理…

校园论坛系统基于PHP的校园管理系统毕设校园好感度系统 校园文化建设系统APP小程序H5前后端源码交付支持二开,一次付款,终生使用

APP小程序H5前后端源码交付&#xff0c;支持二开&#xff0c;一次付款&#xff0c;终身使用&#xff0c;免费更新系统本身源码。 校园社交网络系统开发是一个复杂且综合性的项目&#xff0c;旨在为学生、教师和管理人员提供一个互动、分享和交流的平台。以下是一个关于校园社交…

Redis 源码安装(CentOS 单机)

序言 本文给大家介绍如何在 CentOS 上&#xff0c;通过 Redis 源码单机部署 Redis 服务。 一、部署流程 通过官网下载源码 # 下载源码 wget https://download.redis.io/redis-stable.tar.gz# 解压源码包 tar -xzvf redis-stable.tar.gz在 linux 中执行以下命令&#xff0c;安…

QX-mini51单片机学习(1)---电子电路基础

目录 1电平特性 2单片机io口简绍 3初识电容电阻 4初识电路原理图 5单片机最小系统结构 6单片机工作基本时序 1电平特性 单片机是一种数字集成芯片&#xff0c;数字电路中两种电平&#xff0c;高电平与低电平 高电平&#xff1a;5v 低电平&#xff1a;0v TTL电平信号…

落地护眼灯十大品牌哪款性价比高?品牌排行榜前十名全面揭晓!

落地护眼灯十大品牌哪款性价比高&#xff1f;落地护眼灯已经逐渐成为孩子日常使用率较高的电器之一&#xff0c;它的优点非常突出&#xff0c;对于学习、工作、绘画等环境都能够提供良好的健康环境&#xff0c;同时还携带多种智能调节功能&#xff0c;例如&#xff1a;入座感应…

Python检查代码质量库之flake8使用详解

概要 Flake8是一个流行的Python库,用于检查代码质量和风格一致性,它集成了PyFlakes、pep8、Ned Batchelder的McCabe script等工具。Flake8可以帮助开发者发现代码中的错误,保持代码风格的一致性,是每个Python开发者工具箱中的重要组成部分。 安装 安装Flake8非常简单,可…

什么企业需要首席数据官CCRC-CDO?

随着信息化和人工智能技术的高速发展&#xff0c;企业对数据的需求和重视度越来越高。数据不仅仅是企业的生存之本&#xff0c;更是企业发展的核心驱动力。需要首席数据官的企业主要包括&#xff1a; 1. 大型企业和跨国公司&#xff1a;这些企业通常拥有大量的数据&#xff0c;…

前端get请求日期类型参数向后端传参失败

1、背景 get请求&#xff0c;通过url上传参&#xff0c;因此日期类型是string类型数据 2、异常信息 nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.time.LocalDate] for…

Python-100-Days: Day11 Files and Exception

1.读取csv文件 读取文本文件时&#xff0c;需要在使用open函数时指定好带路径的文件名&#xff08;可以使用相对路径或绝对路径&#xff09;并将文件模式设置为r&#xff08;如果不指定&#xff0c;默认值也是r&#xff09;&#xff0c;然后通过encoding参数指定编码&#xf…