动态规划|【斐波那契数列模型 】|面试题08.01三步问题

目录

题目

思路

普通思路

动态规划思路

1.状态表示

2.状态转移方程

3.初始化

4.填表顺序

5.返回值

代码

空间优化


题目

题目链接

面试题 08.01. 三步问题icon-default.png?t=N7T8https://leetcode.cn/problems/three-steps-problem-lcci/

        三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。

示例1:

 输入:n = 3 
 输出:4
 说明: 有四种走法

示例2:

 输入:n = 5
 输出:13

提示:

  1. n范围在[1, 1000000]之间

思路

普通思路

        小孩每次可以走1步,2步,3步,我们可以将地面看成第0级台阶

        当n=1时,也就是只有一级台阶,很明显可以看出,只有一种方式就是从0->1

        当n=2时,也就是有两个台阶,

        因为小孩可以一次性走两步,所以可以直接从0->2这是一种,

        还有一种就是先上道前面的台阶,然后在到2,有1,而上到1有一种方式(0->1)。所以也是只有一种情况(0->1->2)。

根据以上分析,当n=2时,有2(1+1)种方式上台阶.

当n=3时,也就是有三个台阶

小孩可以一次性走三步,所以第一种方法,0->3

其他方法,小孩可以先上到前面台阶上,在上到3,

        当小孩先上到2,再走一步就到三,上到二有两种方法(0->2,0->1->2))所以在这个情况下有两种方式(0->2->3,0->1->2->3)

        当小孩先上到1,在走两步就到3,而上到1只有一种方式,所以这种方式就是0->1->3

     

根据以上分析,当n=3时,有4(1+2+1)种方式上台阶

当n=4时,也就是有4个台阶

因为小孩不可以一次走四步,所以就是先上到前面台阶,然后到第四台阶.

1)先到第三台阶再走一步到第四台阶,到第三台阶根据前面分析有四种方法(这里就不列举了)

2)先到第二台阶再走两步到第四台阶,到第二台阶有两种方法

3)先到第一台阶再走三步到第四台阶,到第一台阶有一种方法

所以当n等于4时,有7种(4+2+1)方法

当n=5时,也就是有五个台阶

因为小孩不可以一次走五步,所以就是先上到前面台阶,然后到第五台阶.

1)先到第四台阶再走一步到第五台阶,到第四台阶根据前面分析有七种方法(这里就不列举了)

2)先到第三台阶再走两步到第五台阶,到第三台阶有四种方法

3)先到第二台阶再走三步到第五台阶,到第二台阶有二种方法

4)先到第一台阶,小孩也不能一次走四步 ,所以这种情况不存在

所以当n等于5时,有13种(7+4+2)方法

根据以上分析,发现此问题,跟泰波那锲数列问题没有太大差别,都是当前项的值,等于前三项之和。

动态规划思路

1.状态表示

dp表里面的值表示的含义就是一个状态表示。

本题就是,dp[i]表示,到达第i个台阶的方法有几种,根据上面普通思路的分析,创建一个名为dp的一维数组,可以把台阶数看成一维数组的下标

2.状态转移方程

 状态转移方程就是:dp[i]等于什么?

当i>3时 ,dp[i]=dp[i-1]+dp[i-2]+dp[i-3]

3.初始化

  初始化就是:保证填表的时候不越界,对该初始化的值要进行初始化

本题的初始化就是,前三级台阶;

4.填表顺序

确定填表顺序是为了填写当前状态时,所需要的状态已经计算过了

因为当前项等于前三相加,所以只能先算前面的,填表顺序就是从左往右

5.返回值

根据题目要求和状态表示返回我们要的答案

本题就是dp[i]

代码

        代码和泰波那锲数一样,改一下初始化和范围 ,具体详情参考 ---泰波那锲数列问题

        因为n值会出现非常大的情况,这个时候要注意,数值过大问题题目里面告诉我们“对结果模1000000007”,所以每次相加都要对取模

int waysToStep(int n){int dp[1000000]={0};//初始化dp[1]=1;dp[2]=2;dp[3]=4;//边界if(n==1)return 1;if(n==2)return 2;if(n==3)return 4;//填表for(int i=4;i<=n;i++){dp[i]=((dp[i-1]+dp[i-2])%1000000007+dp[i-3])%1000000007;}//返回值return dp[n];}

空间复杂度:O(n)

时间复杂度:O(n)

空间优化

也是利用滚动数组,具体详情参考 ---泰波那锲数列问题

int waysToStep(int n){//初始化int  a=1,b=2,c=4,d=0;//边界if(n==1)return 1;if(n==2)return 2;if(n==3)return 4;while(n>3){//计算d=((a+b)%1000000007+c)%1000000007;//滚动操作a=b;b=c;c=d;n--;}return d;
}

空间复杂度:O(1)

时间复杂度:O(n)

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

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

相关文章

springboot-基础-添加model和controller的简单例子+常用注解含义

备份笔记。所有代码都是2019年测试通过的&#xff0c;如有问题请自行搜索解决&#xff01; 上一篇&#xff1a;springboot-基础-eclipse配置helloword示例 目录 添加model和controller的例子注解开发使用RestController 大坑 Model ModelMap和ModelAndView的区别 添加model和c…

ubuntu常见配置

ubuntu各个版本的安装过程大差小不差&#xff0c;可以参考&#xff0c;ubuntu20.04 其它版本换一下镜像版本即可 安装之后需要配置基本的环境&#xff0c;我的话大概就以下内容&#xff0c;后续可能有所删改 sudo apt-get update sudo apt-get install gcc sudo apt-get inst…

流模型 Flow 超详解,基于 Flow 的生成式模型,从思路到基础到公式推导到模型理解与应用(Flow-based Generative Model)

参考文献&#xff1a; [1] Dinh L, Krueger D, Bengio Y. Nice: Non-linear independent components estimation[J]. arXiv preprint arXiv:1410.8516, 2014. [2] Dinh L, Sohl-Dickstein J, Bengio S. Density estimation using real nvp[J]. arXiv preprint arXiv:1605.08803…

测试开发(6)软件测试教程——自动化测试selenium(自动化测试介绍、如何实施、Selenium介绍 、Selenium相关的API)

接上次博客&#xff1a;测试开发&#xff08;5&#xff09;测试分类标准 &#xff1a;按测试对像划分、按是否查看代码划分、按开发阶段划分、按测试实施组织、按是否运行划分、按是否手工划分、按测试地域划分-CSDN博客 目录​​​​​​​ 什么是自动化测试 自动化测试介绍…

echarts图表用key强制刷新后空白

我的需求是echarts图表全屏后退出全屏在edge浏览器上没有什么问题但是在Chrome浏览器上会出现表格的线不能变回原来的比例的问题 我就想在退出全屏的时候强制刷新一下echarts图表外面的这个div useEffect(() > {if (col) {col.addEventListener("webkitfullscreenchan…

水电表远程集中抄表管理系统

水电表远程集中抄表管理系统是当前水电行业智能化发展的关键技术之一&#xff0c;为水电企业和用户提供了便捷、高效的抄表管理解决方案。该系统结合了远程监控、自动抄表、数据分析等多种功能&#xff0c;实现了水电抄表的智能化和精准化&#xff0c;为用户节省了大量人力物力…

golang学习5,glang的web的restful接口

1. //返回json r.GET("/getJson", controller.GetUserInfo) package mainimport (/*"net/http"*/"gin/src/main/controller""github.com/gin-gonic/gin" )func main() {r : gin.Default()r.GET("/get", func(ctx *…

第五节:Vben Admin权限-前端控制方式

系列文章目录 第一节:Vben Admin介绍和初次运行 第二节:Vben Admin 登录逻辑梳理和对接后端准备 第三节:Vben Admin登录对接后端login接口 第四节:Vben Admin登录对接后端getUserInfo接口 第五节:Vben Admin权限-前端控制方式 文章目录 系列文章目录前言一、Vben Admin权…

【极客技术】前 Twitter 工程师正在构建 Particle,一款由人工智能驱动的新闻阅读器

Particle.news是一个由前Twitter工程师领导的团队创建的新型企业&#xff0c;它在周末进入了私人测试阶段。这家初创公司提供一种个性化的“多视角”新闻阅读体验&#xff0c;不仅利用AI技术来总结新闻&#xff0c;还旨在公平地补偿作者和出版商——至少这是它们的宣称。 尽管…

数据结构(C语言)代码实现(十)——链队列循环队列

目录 参考资料 链队列的实现 LinkQueue.h LinkQueue.cpp 测试函数test.cpp 测试结果 循环队列的实现&#xff08;最小操作子集&#xff09; 完整代码 测试结果 参考资料 数据结构严蔚敏版 链队列的实现 LinkQueue.h #pragma once #include <cstdio> #incl…

到底用不用取地址符,用了有啥区别嘛

一段代码解释&#xff1a; #include <iostream> using namespace std; void swap1(int &a,int &b){int t;ta;ab;bt; } void swap2(int a,int b){int t;ta;ab;bt;cout<<"Im the answer of swap2 : "<<a<<" "<<b<…

【软考-高级软件工程师-信息系统项目管理师】 第三章 信息系统治理知识点 【五分钟看懂】

IT治理用于描述组织在信息化建设和数字化转型过程中是否采用有效的机制使得信息技术开发利用能够完成组织赋予它的使命。IT治理的核心是关注IT定位和信息化建设与数字化转型的责权利划分。 1、IT 治理体系的具体构成包括 IT 定位&#xff1a; IT 应用的期望行为与业务目标一致…

SAP FICO 更改已有业务数据的成本中心公司代码/业务范围

如果对已经发生业务数据的成本中心进行公司代码/业务范围修改&#xff0c;系统会报错&#xff0c;如下图所示 可参考SAP note 62716 - KS020 for change of company code, business area进行解决 解决办法&#xff1a; KS02修改成本中心描述 如下图所示会有一个新的期间&…

【深度学习】SDXL-Lightning 体验,gradio教程,SDXL-Lightning 论文

文章目录 资源SDXL-Lightning 论文 资源 SDXL-Lightning论文&#xff1a;https://arxiv.org/abs/2402.13929 gradio教程&#xff1a;https://blog.csdn.net/qq_21201267/article/details/131989242 SDXL-Lightning &#xff1a;https://huggingface.co/ByteDance/SDXL-Light…

不会这个技巧,你敢说你会经营食堂?

随着科技的不断发展&#xff0c;智能化技术已经深刻改变了各行各业的运作方式&#xff0c;其中餐饮行业也在迎来数字化转型的浪潮。 在这个信息时代&#xff0c;智慧收银系统作为餐饮管理的重要工具&#xff0c;正在逐渐成为提升运营效率、优化用户体验的关键利器。 客户案例 …

基于uniapp电影院购票售票选座系统php/python/nodejs微信小程序_kfsf4

对一些已有的订票系统的设计与实现进行分析研究&#xff0c;寻找规律或产生问题的根源&#xff0c;进而寻求解决问题或改进的方法&#xff0c;形成新的研究课题。 研究步骤 1、图书馆查阅相关资料 2、进行系统功能需求分析 3、根据系统功能需求分析文档绘制系统功能模块图和操作…

Java Web(八)--Servlet(二)

Servlet API Servlet API 包含以下4个Java包&#xff1a; 1. javax.servlet&#xff1a;其中包含定义Servlet和Servlet容器之间契约的类和接口。 2. javax.servlet.http&#xff1a;主要定义了与HTTP协议相关的HttpServlet类&#xff0c;HttpServletRequest接口和HttpServl…

Flask入门一(介绍、Flask安装、Flask运行方式及使用、虚拟环境、调试模式、配置文件、路由系统)

文章目录 一、Flask介绍二、Flask创建和运行1.安装2.快速使用3.Flask小知识4.flask的运行方式 三、Werkzeug介绍四、Jinja2介绍五、Click CLI 介绍六、Flask安装介绍watchdog使用python--dotenv使用&#xff08;操作环境变量&#xff09; 七、虚拟环境介绍Mac/linux创建虚拟环境…

CANoe学习笔记--MeasurementSetup的配置和使用

CANoe提供了一种非常特殊的数据分析模式&#xff0c;即基于数据流方向的测量和分析。MeasurementSetup也是基于图形化的设置模式&#xff0c;能够让工程人员一目了然。 如何理解“基于数据流方向的图形化配置”看下图 数据是像流水一样&#xff0c;定向的向左移动&#xff0c;…

SSP-RCP情景下全球1-km分辨率土地利用预测数据集(2020-2100)【耕地、林地、草地、城乡、工矿、居民用地、未利用地、水体】

作者基于ESA-CCI历史土地利用数据&#xff0c;使用GCAM模型估算了未来土地利用面积需求&#xff1b;然后采用一种改进的元胞自动机模型PLUS对需求进行高空间分辨率降尺度迭代模拟&#xff0c;得到SSP-RCP情景下全球1-km分辨率土地利用预测数据集&#xff08;2020-2100&#xff…