动态规划(算法)---02.斐波那契数列模型_三步问题

news2024/9/20 4:54:41

题目链接:

面试题 08.01. 三步问题 - 力扣(LeetCode)icon-default.png?t=O83Ahttps://leetcode.cn/problems/three-steps-problem-lcci/description/

一、题目解析

题目:

题目讲解:

我们先举例查看规律:

第一台阶:我们从0台阶上到第一台阶,只需一步,就可以上去,所以只有一种上法

第二台阶:我们既可以从0台阶两步上到第二台阶,也可以先一步上第一台阶,再一步上到第二台阶,所以有两种

第三台阶:我们首先可以从0台阶三部上到第二台阶,其次可以先两步上第二台阶,再一步上第三台阶,同样也可以先一步上到第一台阶,再两步上到第二台阶,最后是一步一步上到第三台阶,总共有四种上去的方法。

那这里有没有什么规律呢?

  • 我们已经知道上第一台阶只有一种方法,上第一台阶后我们可以再跨两步上到第三台阶,这便成为了上第三台阶的一种方式!
  • 同样,我们知道上第二台阶有两种方法,这两种方法再跨一步就可以上到第三台阶,这不就成为了上第三台阶的两种方式了嘛
  • 第四种方法是从0台阶跨三步,这里没有明显的规律,我们接着看第四台阶

第四台阶:根据我们从第三台阶发现的一点规律,我们在这里观察一下

首先,我们要清楚,我们最高只能走三步,也就是想走三步我们只能从第一台阶走

  • 我们已经知道上第一台阶有一种方法,那上到第一台阶后再跨三部到第四台阶,就是我们上第四台阶的一种方式。
  • 同样,我们知道上第二台阶有两种方法,这两种方法再跨两步可以上到第四台阶,这不就成为了我们上第四台阶的方式了嘛。
  • 最后,上第三台阶有三种方法,那这三种方法再跨一步可以上到第四台阶,就是我们上到第四台阶的四种方式。

我们可以发现,上第四台阶的方法是上前面三个台阶的方法之和:1+2+4=7

综上,我们已经发现规律:从第四台阶开始,上每一台阶的方法是上前面三个台阶的方法之和

二、算法原理

1、状态表示

我们在状态标识的时候,一般都会创建一个数组dp,也就是我们所说的dp表,我们要做的就是把每一个状态的值填入这个表内,最终这个表内的某一个值可能就是我们要返回的值。 

  状态简单理解就是dp表内某一个值代表的含义。

  我们通常选择以一个位置为开始为开始或者为结尾

如何确定状态表示

  • 题目要求

   简单的题目里一般会给出

  • 经验+题目要求

  越学越深入,动态规划也是熟能生巧,在题目中没有明显给出的时候,我们就要凭借自己做题的经验来确定,所以就需要我们大量的做题。

  • 分析问题的过程中,发现重复子问题

分析问题的过程中把重复子问题抽象成我们的状态表示,这个更难理解,一切的基础都是我们先对动态规划算法熟练运用。我也不懂,我们慢慢来。 


那我们这道题的状态表示应该是什么呢?

根据我们对题目的了解,题目让我们求上到第n台阶的方法有多少,那我们创建一个数组dp,让dp[n]表示我们到达第n台阶的方法有多少。 

2、状态转移方程

 确定状态表示之后我们就可以根据状态标识推出状态转移方程

  状态转移方程是什么?

不讲什么复杂的,简单来说状态转移方程就是    dp[i]等于什么 dp[i]=?

  这个就是状态转移方程,我们要做的,就是推出dp[i]等于什么

  我们根据状态表示再结合题目+经验去推理转移方程,这一步也是我们整个解题过程中最难的一步

  我们在这道题先简单了解下什么是状态转移方程,之后比较难的题目再细推

 根据我们在题目解析中发现的规律:从第四台阶开始,上每一台阶的方法是上前面三个台阶的方法之和

 我们可知状态转移方程为:dp[i]=dp[i-1]+dp[i-2]+dp[i-3]

3、初始化

 我们创建dp表就是为了把他填满,我们初始化是为了防止在填表的过程中越界或者其它小的错误

怎么谈越界?

当i等于1时,dp[i-2],dp[i-3]都是越界,根本没有这个台阶,所以我们要进行初始化。

我们这道题也可以知道,规律是从第四台阶开始的,所以我们初始化前三台阶,是为了后面更好的进行

初始化:dp[1]=1 dp[2]=2 dp[3]=4

注:这里的下标没有错,我们为了做题更好理解,再对数组dp进行定义时会比台阶数多1,这样下标就与台阶对应,更好的理解!

4、填表顺序

注意填表顺序,是因为我们需要在填当前状态的时候,所需要的状态已经计算过了

  这个意思就是,我们在填状态dp[4]的时候,我们就已经知道其所需要的dp[1]、dp[2]、dp[3]状态的值了, 那假如我们直接填dp[4],可其所需要的状态dp[3]我们还没填,所以就计算不出来我们当前状态dp[4]的值,所以填表顺序也是需要考虑的一项

  这道题的填表顺序就是我们需要从状态dp[4]开始,依次填表。
                        

5、返回值

返回值就是我们最后需要求出的值,在这里也就是我们我们的数组dp的最后一个数dp[n]。返回值一般通过题目要求和状态表示来判断出来。

  以上就是我们算法原理的五步,这五步完成,其实我们就已经可以解题了。

三、编写代码

class Solution {
public:
    int waysToStep(int n) {
//细节问题
        const int Mod=1e9+7;
        if(n==1||n==2)
        {
            return n;
        }
        if(n==3)
        {
            return 4;
        }
//1、创建dp表
        vector<int> dp(n+1);
//2、初始化
        dp[1]=1;dp[2]=2;dp[3]=4;
//3、填表
        for(int i=4;i<=n;i++)
        {
            dp[i]=((dp[i-1]+dp[i-2])%Mod+dp[i-3])%Mod;
        }
//4、返回值
        return dp[n];
    }
};

 问题解释:

  •  细节1:我们需要模上1e9+7,否则数太大会被不通过,注意模的细节,两个的和先模,模完与另外一个数相加继续再模一次.

  • 细节2:因为第一、二、三台阶没有规律,不能进入填表,所以先检查台阶数,如果是一、二、三台阶,那么就返回其对应的方法数即可

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

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

相关文章

鸿蒙OS 概述

鸿蒙OS 系统定义 HarmonyOS 是一款“面向未来”、面向全场景&#xff08;移动办公、运动健康、社交通信、媒体娱乐等&#xff09;的分布式操作系统。在传统的单设备系统能力的基础上&#xff0c;HarmonyOS 提出了基于同一套系统能力、适配多种终端形态的分布式理念&#xff0c…

《食品界》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《食品界》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《食品界》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a; 中国商业联合会 主办单位&#x…

【Hot100】LeetCode—62. 不同路径

目录 1- 思路题目识别动规五部曲 2- 实现⭐62. 不同路径——题解思路 3- ACM 实现 原题链接&#xff1a;62. 不同路径 1- 思路 题目识别 识别1 &#xff1a;给一个二维矩阵&#xff0c;每次只能向下或者向右移动一步识别2&#xff1a;求解到达最右下角的路径数。 动规五部曲…

Ubuntu WSL使用技巧

0 Preface/Foreword 1 默认为root用户 当下载完成Ubuntu之后&#xff0c;首次登录&#xff0c;当完成初始化后&#xff0c;提示输入新的用户名时候&#xff0c;直接点击右上角的X按钮&#xff0c;再重新登陆&#xff0c;系统会默认使用root权限登录。 2 root用户和普通用户切换…

力科示波器桌面分析远程控制软件

软件在这里下载&#xff1a;Teledyne LeCroy - MAUI Studio - Remote and Offline PC Analysis Software for an Oscilloscope 我去年因为要分析示波器波形&#xff0c;下载过它的MAUI Studio。它的免费版需要逐年注册。注册是免费的。示波器从业人员和工程技术人员可以看看示…

基于微信小程序的鲜花销售系统设计与实现毕业设计-附源码

鲜花销售系统|鲜花销售系统源码|鲜花销售小程序|基于微信小程序的鲜花销售系统设计与实现 鲜花销售系统源码&#xff1a;鲜花销售微信小程序具有鲜花销售信息管理功能的选择&#xff0c;鲜花销售微信小程序采用java技术&#xff0c;基于mysql开发&#xff0c;实现了首页、个人…

企业常用的源代码加密软件有哪些?10款源代码加密软件推荐

在现代企业中&#xff0c;源代码保护变得尤为重要&#xff0c;因为源代码不仅是软件的核心资产&#xff0c;还可能包含商业秘密和知识产权。因此&#xff0c;许多企业都在寻找合适的源代码加密软件来保护其代码的安全性。本文将为您介绍10款常用的源代码加密软件&#xff0c;帮…

4款工具搞定固态硬盘数据恢复!一起来看看!

数据丢失&#xff0c;这可能是每个电脑用户都曾遇到过的噩梦。今天&#xff0c;我就来聊聊我亲身体验过的四款数据恢复软件&#xff0c;看看它们在帮我从硬盘的“深渊”中捞回宝贵数据时的表现如何呢&#xff1f;一起来看看吧&#xff01; 一、福昕数据恢复 网址&#xff1a;h…

油电叉车倒车防撞报警系统精准探测

油电叉车倒车防撞报警系统通过集成最新的传感器技术、图像识别算法以及智能控制技术‌&#xff0c;通过实时监测叉车周围环境中的障碍物、行人和其他叉车&#xff0c;及时发出警报&#xff0c;避免可能的碰撞事故。 油电叉车倒车防撞报警系统功能详解 精准探测 叉车倒车时&a…

怎么仿同款小程序的开发制作方法介绍

很多老板想要仿小程序系统&#xff0c;就是想要做个和别人界面功能类似的同款小程序系统&#xff0c;咨询瀚林问该怎么开发制作&#xff1f;本次瀚林就为大家介绍一下仿制同款小程序系统的方法。 1、确认功能需求 想要模仿同款小程序系统&#xff0c;那么首先需要找到自己想要…

C#使用handle实现获取占用指定文件或文件夹的进程(Locksmith功能)

前言&#xff1a;很多时候&#xff0c;一些不知道啥进程&#xff0c;把你的文件给占用了&#xff0c;然后就没办法删掉或者做其他操作。如果使用Locksmith功能&#xff0c;就可以实现快速锁定是哪个进程在搞事情&#xff0c;把对应进程干掉就可以了。下面内容演示C#使用几行代码…

Redis集群slot迁移改造实践

作者&#xff1a;来自 vivo 互联网存储团队- Xu Xingbao Redis 集群经常需要进行在线水平扩缩容&#xff0c;实际操作过程中发现迁移期间服务时延剧烈抖动&#xff0c;业务侧感知明显&#xff0c;为了应对以上问题对原生 Redis 集群 slot 迁移功能进行优化改造。 一、背景介绍…

乔迁新址,盛启新章!聚铭网络河北办事处盛大开业

2024年9月10日&#xff0c;金秋九月&#xff0c;阳光灿烂。在这样一个美好的日子里&#xff0c;聚铭网络河北办事处正式迎来了乔迁之喜并盛大开业。随着公司业务规模的快速扩张&#xff0c;原有的办公空间已经不足以支撑未来的增长&#xff0c;新址的启用不仅代表了我们迈出的一…

5V*0.5A低压降二极管芯片 CH213

概述 CH213是带限流功能的低压降理想二极管芯片。芯片内部集成了过流保护、短路保护、过温保护、电源极性保护等模块&#xff0c;额定5V*0.5A&#xff0c;支持5V电压下不超过1A电流的直流应用&#xff0c;在 VO输出端发生过流时可以限制电流从而保护供电系统&#xff0c;在输入…

Vue路由一(简介、分类、基本使用、注意事项)

目录 1. 简介2. 路由的分类3. 基本使用4. 注意事项 1. 简介 路由就是一组key:value的对应关系。vue可能是function或component多个路由&#xff0c;需要经过路由器管理 是为了实现SPA(single page web application)单页面应用。以前需要实现多个html&#xff0c;现在只需实现一…

零基础也能掌握!大模型训练指南

在这个信息爆炸的时代&#xff0c;人工智能技术正以前所未有的速度渗透到我们生活的方方面面。从智能手机上的语音助手到自动驾驶汽车&#xff0c;AI的应用无处不在。而在这些令人惊叹的技术背后&#xff0c;大语言模型&#xff08;LLM&#xff09;扮演着至关重要的角色。它们不…

Navicat On-Prem Server 2.0 | MySQL与MariaDB基础管理功能正式上云

近日&#xff0c;Navicat 发布了 Navicat On-Prem Server 2.0 的重大版本更新。这标志着这款自2021年首发的私有云团队协作解决方案迈入了一个崭新的阶段。此次2.0版本的飞跃性升级&#xff0c;核心聚焦于MySQL与MariaDB基础管理功能的全面革新与强化&#xff0c;赋予了用户的操…

当 PLC 遇见 “IT”

IT&OT 深度融合工控人加入PLC工业自动化精英社群 IT & OT integration 当今不断发展的工业自动化世界&#xff0c;在智能、高效和快速的系统和软件应用中&#xff0c;数据扮演着越来越重要的角色。传统的 IT 网络中&#xff0c;提供了丰富多彩的规范和协议&#xff0…

PHP即刻送达同城派送小程序系统

即刻送达&#xff0c;同城派送小程序系统让生活更便捷 &#x1f680; 瞬间连接&#xff0c;即刻送达的奇迹 你是否曾经因为等待快递而焦急万分&#xff1f;是否渴望有一种方式能让物品像魔法一样瞬间出现在你面前&#xff1f;现在&#xff0c;有了“即刻送达同城派送小程序系…

交易所站队“NEIRO”?MEME内战进行时

加密市场总有“狗”传奇。 日前&#xff0c;此前一度被称为新一代“狗狗币”的NEIRO合约被OKX 和 Binance先后上线&#xff0c;在交易所推动下&#xff0c;NEIRO迅速暴涨超6倍。而这一上线&#xff0c;也正式宣告分庭抗礼的竞品“Neiro”走向缓慢的消亡。 大小写MEME的最终结局…