LeetCode刷题--- 第 N 个泰波那契数

个人主页:元清加油_【C++】,【C语言】,【数据结构与算法】-CSDN博客

个人专栏

力扣递归算法题

 http://t.csdnimg.cn/yUl2I

【C++】    

​​​​​​http://t.csdnimg.cn/6AbpV

数据结构与算法

 ​​​http://t.csdnimg.cn/hKh2l


前言:这个专栏主要讲述动态规划算法,所以下面题目主要也是这些算法做的  

我讲述题目会把讲解部分分为3个部分:
1、题目解析

2、算法原理思路讲解

3、代码实现


第 N 个泰波那契数

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

题目

泰波那契序列 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

解法

题目解析

  • T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2。
  • 给你整数 n,请返回第 n 个泰波那契数 Tn 的值。

算法原理讲解

我们这题使用动态规划,我们做这类题目可以分为以下五个步骤

  1. 状态显示
  2. 状态转移方程
  3. 初始化(防止填表时不越界)
  4. 填表顺序
  5. 返回值

1.状态表示

        这道题可以【根据题⽬的要求】直接定义出状态表示:
        dp[i] 表示:第 i 个泰波那契数的值。

2.状态转移方程

        题⽬已经⾮常贴⼼的告诉我们了:
        dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]

3.初始化

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

4.填表顺序

        毫⽆疑问是「从左往右」。

5.返回值

        应该返回 dp[n] 的值。

代码实现

  • 时间复杂度:O(n)。

  • 空间复杂度:O(1)。

一、使用一维数组

class Solution {
public:int tribonacci(int n) {if (n == 0 || n == 1) return n;vector<int> dp(n + 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];}
};

二、使用滚动数组优化

class Solution {
public:int tribonacci(int n) {if (n == 0 || n == 1) return n;int p = 0, q = 0, r = 1, s = 1;for (int i = 3; i <= n; ++i) {p = q;q = r;r = s;s = p + q + r;}return s;}
};

三、递归(超时) 

class Solution {
public:int tribonacci(int n) {if (n == 0 || n == 1) return n;if (n == 2)return 1;return tribonacci(n-1) + tribonacci(n-2) + tribonacci(n-3);}
};

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性代数基础知识

计算机视觉一些算法中常会用到线性代数的一些知识&#xff0c;为了便于理解和快速回忆&#xff0c;博主这边对常用的一些知识点做下整理&#xff0c;主要来源于如下这本书籍。 1. 矩阵不仅仅是数字排列而已&#xff0c;不然也不会有那么大精力研究它。其可以表示一种映射 关于…

ROS TF坐标变换 - 动态坐标变换

目录 一、动态坐标变换&#xff08;C实现&#xff09;二、动态坐标变换&#xff08;Python实现&#xff09; 一、动态坐标变换&#xff08;C实现&#xff09; 所谓动态坐标变换&#xff0c;是指两个坐标系之间的相对位置是变化的。比如机械臂末端执行器与 base_link 之间&…

革新MIMO无线电测试,精准测量10 MHz-8 GHz复杂射频信号!

背景介绍 在当今发展的趋势下&#xff0c;无线通信协议变得越来越复杂。具有多个输入和输出&#xff08;MIMO&#xff09;、高达320 MHz的带宽以及高4096 QAM的调制方案。而EN 300 328和EN 301 893标准描述了无线电以及2.4 GHz和5 GHz宽带信号的频谱参数。 EN 300328是欧盟RE…

Java面试题大全

发现网上很多Java面试题都没有答案&#xff0c;所以花了很长时间搜集整理出来了这套Java面试题大全&#xff0c;希望对大家有帮助哈~博主已将这些面试题整理到一个网站上&#xff0c;每天更新 Java 面试题&#xff0c;目前有 1万多道 Java 高频面试题。 本套Java面试题大全&am…

SDG大数据平台简介

联合国可持续发展目标&#xff08;Sustainable Development Goals&#xff09;缩写SDGs&#xff0c;是联合国制定的17个全球发展目标&#xff0c;在2000-2015年千年发展目标&#xff08;MDGs&#xff09;到期之后继续指导2015-2030年的全球发展工作。&#xff08;摘自百度&…

【PWN学习之House of 系列】House Of Einherjar

写在前面 有路线的学习一下 glibc 堆利用的 house of 系列利用手法。 主要参考以下文章以及文章中涉及的连接。 https://roderickchan.github.io/zh-cn/2023-02-27-house-of-all-about-glibc-heap-exploitation 简介 漏洞成因 溢出写、off by one、off by null 适用范围 …

树莓派4B-Python使用PyCharm的SSH协议在电脑上远程编辑程序

目录 前言一、pycharm的选择二、添加SSH的解释器使用总结 前言 树莓派的性能始终有限&#xff0c;不好安装与使用高级一点的程序编辑器&#xff0c;如果只用thonny的话&#xff0c;本人用得不习惯&#xff0c;还不如PyCharm&#xff0c;所以想着能不能用电脑中的pycharm来编写…

一、Linux内核介绍

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

目标检测-One Stage-SSD

文章目录 前言一、SSD的网络结构和流程二、SSD的创新点总结 前言 根据前文目标检测-One Stage-YOLOv1可以看出YOLOv1的主要缺点是&#xff1a; 每个格子针对目标框的回归是不加限制的&#xff0c;导致目标的定位并不是很精准和Faster RCNN等先进Two Stage算法相比&#xff0c…

Unity之地形的构建

PS&#xff1a;公司没活干&#xff0c;好无聊偷偷摸鱼学Unity&#xff0c;害怕自己学完之后忘记&#xff0c;写下这一篇博客 先来看一下效果图&#xff1a;有山有水有树有草地 创建一个新的Unity3D项目 这里要用到Unity官方的免费资源包&#xff08;现在好像已经下架了百度网盘…

如何在iPhone设备中查看崩溃日志

​ 目录 如何在iPhone设备中查看崩溃日志 摘要 引言 导致iPhone设备崩溃的主要原因是什么&#xff1f; 使用克魔助手查看iPhone设备中的崩溃日志 奔溃日志分析 总结 摘要 本文介绍了如何在iPhone设备中查看崩溃日志&#xff0c;以便调查崩溃的原因。我们将展示三种不同的…

【华为机试】2023年真题B卷(python)-计算疫情扩散时间

一、题目 题目描述&#xff1a; 请根据给定的地图计算&#xff0c;多少天以后&#xff0c;全部区域都会被感染。 如果初始地图上所有区域全部都被感染&#xff0c;或者没有被感染区域&#xff0c;返回-1 二、输入输出 输入描述: 一行N*N个数字&#xff08;只包含0,1&#xff0c…