【LeetCode】509. 斐波那契数(简单)——代码随想录算法训练营Day38

题目链接:509. 斐波那契数

题目描述

斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:

F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1

给定 n ,请计算 F(n) 。

示例 1:

输入:n = 2
输出:1
解释:F(2) = F(1) + F(0) = 1 + 0 = 1

示例 2:

输入:n = 3
输出:2
解释:F(3) = F(2) + F(1) = 1 + 1 = 2

示例 3:

输入:n = 4
输出:3
解释:F(4) = F(3) + F(2) = 2 + 1 = 3

提示:

  • 0 <= n <= 30

文章讲解:代码随想录

视频讲解:手把手带你入门动态规划 | LeetCode:509.斐波那契数_哔哩哔哩_bilibili

题解1:动态规划

思路:使用动态规划的思路来求解本题,学习动态规划的基本思路。

动态规划分析:

  • dp 数组以及下标的含义:dp[i] 为第 i 个斐波那契数。
  • 递推公式:dp[i] = dp[i - 1] + dp[i - 2]。
  • dp 数组初始化:dp[0] = 0,dp[1] = 1。
  • 遍历顺序:从前向后。
  • 打印 dp 数组:0、1、1、2、3、......
/*** @param {number} n* @return {number}*/
var fib = function(n) {const dp = new Array(n + 1);dp[0] = 0;dp[1] = 1;for (let i = 2; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];
};

分析:时间复杂度为 O(n),空间复杂度为 O(n)。

题解2:动态规划优化

思路:可以看到 dp[i] 依赖于前2个状态,用2个变量记录前2个数,在循环中直接更新这2个变量。

/*** @param {number} n* @return {number}*/
var fib = function(n) {if (n === 0) {return 0;}if (n <= 2) {return 1;}let a = 1, b = 1;while (n-- > 2) {const c = a + b;a = b;b = c;}return b;
};

分析:时间复杂度为 O(n),空间复杂度为 O(1)。

收获

动态规划5步曲:

  • dp 数组以及下标的含义。
  • 递推公式。
  • dp 数组初始化。
  • 遍历顺序。
  • 打印 dp 数组。

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

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

相关文章

数字新纪元:探索Web3对社会的影响

在当今数字化时代&#xff0c;技术的进步已经成为社会发展的驱动力之一。而随着区块链技术的快速发展&#xff0c;我们正处在一个即将到来的数字新纪元——Web3时代。这一新时代不仅仅是技术的迭代升级&#xff0c;更是对传统社会模式的颠覆和重构。本文将深入探讨Web3对社会的…

当前主流开发语言有哪些:了解其特性、应用与示例

随着技术飞速发展&#xff0c;编程语言的丰富多样性为开发者提供了广泛的选择。每种语言都有其适用的场景和独特的特性。本文将综合探讨目前市场上最流行、最多人使用的几种主流开发语言&#xff0c;包括它们的特点、典型应用场景以及简单示例代码。 一、Python 特点 Python…

深入理解指针(c语言)

目录 一、使用指针访问数组二、数组名的理解1、数组首元素的地址2、整个数组 三、一维数组传参的本质四、冒泡排序五、二级指针六、指针数组 一、使用指针访问数组 可以使用指针来访问数组元素。例如&#xff0c;可以声明一个指针变量并将其指向数组的第一个元素&#xff0c;然…

Github代码仓库SSH配置流程

作者&#xff1a; Herman Ye Auromix 测试环境&#xff1a; Ubuntu20.04 更新日期&#xff1a; 2024/02/21 注1&#xff1a; Auromix 是一个机器人爱好者开源组织。 注2&#xff1a; 由于笔者水平有限&#xff0c;以下内容可能存在事实性错误。 相关背景 在为Github代码仓库配…

Unity Shader ASE基础效果思路与代码(一):遮罩、硬边溶解、光边溶解、UV扰动

Unity Shader ASE基础效果思路与代码(一)&#xff1a;遮罩、硬边溶解、光边溶解、UV扰动 文章目录 Unity Shader ASE基础效果思路与代码(一)&#xff1a;遮罩、硬边溶解、光边溶解、UV扰动遮罩效果硬边溶解光边溶解UV扰动 遮罩效果 效果展示&#xff1a; 思路与代码&#xff1…

消息队列-RabbitMQ:死信队列

十五、死信队列 1、死信的概念 先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;字面意思可以这样理解&#xff0c;一般来说&#xff0c;producer 将消息投递到 broker 或者直接到 queue 里了&#xff0c;consumer 从 que…

postgres

1.下载postgres 解压后 bin\initdb -D data -U postgres -A password -E utf8 -W // 初始化设置密码这里的账号是postgres pg_ctl.exe register -N "PostgreSQL" -D "F:/pgsql/data" //windows 本地生成服务 pg_ctl -D F:/pgsql/data -l F:/pgsql/logs/pg…

用idea debug时,怎么在某个map对象中再加个key value

实现方式 在用idea 进行 debug时&#xff0c;我们经常喜欢对某行代码打断点&#xff0c;然后对某个对象重新设置值&#xff0c;以快速地实现我们预期想覆盖的场景。通常的方式是用鼠标右键点击某个对象&#xff0c;然后选择Set value进行设置值&#xff0c;但是如果想在map中添…

鸿蒙原生应用元服务实战-发布时多设备选择注意事项

在可公开可获取DevEco Studio最新版本&#xff0c;Stage模型ArkTSAPI9开发元服务HarmonyOS4现不支持平板等;但是元服务在发布时是可选平板、智慧屏电视设备发布。 如果开发人员与上架运营人员沟通不充分的话&#xff0c;上架运营人员可能会选择多设备发布&#xff0c;试一试&am…

bugku3

xxx二手交易市场 进去是这样讴歌乱进的页面 查看了一下源代码也没什么 先随便注册一个账号 然后登录 随便看了看&#xff0c;发现可以修改头像 上传文件 随便上传了一个图片 发现他对图片进行了base64加密 解密后得到是 data:image/jpeg;base64 这里重新修改类型为php&a…

【buuctf--我有一只马里奥】

这是一道关于 ntfs 流查看的题目运行 exe 后会出来一个 1.txt 文件 在 exe 和 1.txt 文件目录下打开终端&#xff0c;输入 notepad 1.txt:flag.txt就可以看到答案了。 这么做的原因见BUUCTF misc 专题&#xff08;53&#xff09;[SWPU2019]我有一只马里奥_ntfs flag.txt 马里…

OpenAI新推出的Sora是什么?如何注册使用?

2024年2月16号&#xff0c;OpenAI全新发布文本视频模型Sora&#xff0c;可以通过指令生成特定的视频内容&#xff0c;这对于内容营销、广告宣传、教育教学等行业都将来带来巨大的机遇与挑战。 相信许多人跟小编一样&#xff0c;对此新兴产品跃跃欲试&#xff0c;那么应该如何注…

柔顺控制笔记

参资料&#xff1a; 【1】https://zhuanlan.zhihu.com/p/620918453 【2】https://blog.csdn.net/a735148617/article/details/108564836 【3】https://zhuanlan.zhihu.com/p/126338809 【4】机器人与环境间力_位置控制技术研究与应用_李正义 【5】水下机械臂建模及柔顺控制方法…

编程笔记 Golang基础 014 数据类型概述

编程笔记 Golang基础 014 数据类型概述 一、基本数据类型二、复合数据类型三、引用类型四、特殊类型小结 Go 语言的数据类型系统涵盖了基本数据类型、复合数据类型以及引用类型。 下面将对这些类型进行详细说明&#xff1a; 一、基本数据类型 布尔型 (bool)&#xff1a;表示逻…

Javascript中var和let之间的区别

文章目录 一.变量提升(声)二.let和var的区别 区别&#xff1a; 1、var有变量提升&#xff0c;而let没有&#xff1b; 2、let不允许在相同的作用域下重复声明&#xff0c;而var允许&#xff1b; 3、let没有暂时性死区问题&#xff1b; 4、let创建的全局变量没有给window设置对应…

不同种类遥感图像汇总 !!

文章目录 前言 1、可见光遥感图像 2、全色遥感图像 3、多光谱遥感图像 4、高光谱遥感图像 5、红外遥感图像 6、激光雷达图像 7、合成孔径雷达遥感图像 前言 遥感技术是从远距离感知目标反射或自身辐射的电磁波、可见光、红外线&#xff0c;对目标进行探测和识别的技术。遥感卫…

懒汉单例设计模式与饿汉单例设计模式

单例模式即一个类确保只有一个对象,主要用于避免浪费内存 1.饿汉单例设计模式:拿到对象时,对象就早已经创建好了 public class A { private static A a new A(); private A(){ } public static A getObject(){ return a;} } 写法: 把类的构造器私有 在类中自己创建一个对…

【IOS】oc中property属性值详解

1. atomic与nonatomic atomic&#xff1a;原子属性确保属性的读取和写入操作在多线程环境中是线程安全的。这意味着&#xff0c;当一个线程正在读取或写入属性时&#xff0c;其他线程不能同时访问该属性。虽然这提供了线程安全性&#xff0c;但它也引入了性能开销&#xff0c;…

【JAVA高级面试题】运用锁机制实现一个自定义的阻塞队列

文章目录 前言实战演示写在最后 前言 前几天看见一个高级Java面试题&#xff0c;我觉得很有代表意义。既考察了面试者的基本锁机制运用&#xff0c;也了解了阻塞队列的产生实现原理。先分享出来&#xff0c;以供鉴赏。 面试题&#xff1a;实现一个自定义的阻塞队列&#xff0c…

java面试题之spring篇

1.Spring是什么&#xff1f;作用是什么&#xff1f; Spring是一个轻量级的JavaEE框架&#xff0c;它主要解决企业应用中的复杂性问题。Spring框架有三个核心部分&#xff1a;IoC容器、AOP和数据访问/集成层。Spring中的IoC容器提供了一种对象创建和对象之间关系管理的机制&…