动态规划|【斐波那契数列模型 】|面试题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://www.hqwc.cn/news/498688.html

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

相关文章

【软考高项】【计算专题】- 6 - 成本类 - 挣值管理

目录 一、知识点 1、基础概念 1.1 教材定义 1.2 理解方式 方式一&#xff1a;使用公式理解 方式二&#xff1a;使用语言描述 2、总结 2.1 三个参数 2.2 四个指标 2.3 其他关键参数 二、真题举例 高级2014年下半年案例分析试题 【问题1】 【问题2】 【问题3】 一…

Java反射机制底层原理

反射机制 这篇文章我是参考了Java 中的反射机制&#xff08;两万字超全详解&#xff09;_java反射-CSDN博客 然后我在这里做一下总结&#xff0c;因为原文章真的很好&#xff0c;我才疏学浅没什么进行补充&#xff0c;只能做出自己的总结并且写一下自己对这个的理解。 原理&…

吴恩达机器学习全课程笔记第四篇

目录 前言 P61-P68 激活函数 Softmax算法 P69-P73 Adam算法 更多类型的层 模型评估 P74-P79 偏差和方差 建立表现基准 学习曲线 偏差和方差与神经网络 前言 这是吴恩达机器学习笔记的第四篇&#xff0c;第三篇笔记请见&#xff1a; 吴恩达机器学习全课程笔记第…

android开发电子书,android基础编程

内存泄漏是什么&#xff1f; 内存泄漏即 ML &#xff08;Memory Leak&#xff09; 指 程序在申请内存后&#xff0c;当该内存不需再使用 但 却无法被释放 & 归还给 程序的现象 内存泄漏有哪些情况&#xff0c;对应的解决方案&#xff1f; 内存泄漏的原因归根到底就是当需…

fastAdmin表格列表的功能

更多文章&#xff0c;请关注&#xff1a;fastAdmin后台功能详解 | 夜空中最亮的星 FastAdmin是一款基于ThinkPHP5Bootstrap的极速后台开发框架。优点见开发文档 介绍 - FastAdmin框架文档 - FastAdmin开发文档 在这里上传几张优秀的快速入门图: 一张图解析FastAdmin中的表格列…

1688代采系统一键下单到1688|代购系统自动对接1688货源一键下单采购

在国外有很多商家和客户&#xff0c;想要从中国批发或者购买商品。因此国内的代采商应运而生&#xff0c;国外商家给他们提供自己需要购买商品清单&#xff0c;他们帮助国外客户在中国购买商品&#xff0c;并且邮寄到国外。国外商家给代采商提供商品清单后&#xff0c;代采商去…

【多模态】28、LLaVA 第一版 | Visual Instruction Tuning 多模态模型的指令微调

论文&#xff1a;Visual Instruction Tuning 代码&#xff1a;https://llava-vl.github.io/ 出处&#xff1a;NeurIPS 2023 Oral 系列工作&#xff1a;LLaVA-1.5、LLaVA-PLUS、LLaVA-Interactive、Video-LLaVA、LLaVA-Med 等&#xff0c;LLaVA 也是首次将指令学习引入多模态…

机器学习:原理、应用与未来展望

第一章 是什么 机器学习&#xff08;Machine Learning&#xff09;是一门跨学科的学科&#xff0c;它使用计算机模拟或实现人类学习行为&#xff0c;通过不断地获取新的知识和技能&#xff0c;重新组织已有的知识结构&#xff0c;从而提高自身的性能。机器学习涉及多个学科&am…

(C语言)二分查找

在⼀个升序的数组中查找指定的数字n&#xff0c;很容易想到的⽅法就是遍历数组&#xff0c;但是这种⽅法效率⽐较低。⽐如我买了⼀双鞋&#xff0c;你好奇问我多少钱&#xff0c;我说不超过300元。你还是好奇&#xff0c;你想知道到底多少&#xff0c;我就让你猜&#xff0c;你…

threejs 大场景下,对小模型进行贴图处理

接上篇小模型的删除☞threeJS 大模型中对小模型进行删除-CSDN博客 针对已有模型&#xff0c;根据数据状态进行贴图处理&#xff0c;例如&#xff1a;机房内电脑告警状态、电脑开关机状态下的不同状态贴图等 示例模型还是以丛林小屋为例&#xff1a;针对该模型中的树干进行贴图…

一个具有强大PDF处理能力的.Net开源项目

PDF具有跨平台、可读性强、不可修改性、无需特定阅读软件、内容安全等好处&#xff0c;在工作中经常都会用到。 所以&#xff0c;我们在项目开发中&#xff0c;经常需要生成PDF的文件&#xff0c;或者把Html、Xml等文件转化为PDF格式。 今天给大家推荐一个具有PDF处理能力的.…

追觅科技社招校招北森在线测评考情分析、真题题库、通关答案、答题技巧

追觅科技社招校招北森在线测评考情分析、真题题库、通关答案、答题技巧 追觅是一家专注智能生活家电的全球化科技公司&#xff0c;于2017年创立。它起源于清华大学校内规模最大的科技平台“天空工场”。早在2015年&#xff0c;以“天空工场”成员为核心的追觅初创团队&#x…