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

news2024/11/18 5:48:21

目录

题目

思路

普通思路

动态规划思路

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.coloradmin.cn/o/1476204.html

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

相关文章

【JAVA日志】关于日志系统的架构讨论

目录 1.日志系统概述 2.环境搭建 3.应用如何推日志到MQ 4.logstash如何去MQ中取日志 5.如何兼顾分布式链路追踪 1.日志系统概述 关于日志系统&#xff0c;其要支撑的核心能力无非是日志的存储以及查看&#xff0c;最好的查看方式当然是实现可视化。目前市面上有成熟的解决…

今天面试了一个工作4年的测试工程师,一问连自动化基础都不知道,还反过来怼我..

金三银四黄金期&#xff0c;我们公司也开始大量招人了&#xff0c;我这次是公司招聘的面试官之一&#xff0c;主要负责一些技术上的考核&#xff0c;这段时间还真让我碰到了不少奇葩求职者 昨天公司的HR小席刚跟我吐槽&#xff1a;这几个星期没有哪天不加班的&#xff01;各种…

LTD264次升级 | 对接AsiaPay • 人民币买外币商品 •知识付费订单可关闭 • 专栏支持VIP免支付购买

​ 1、对接AsiaPay第三方支付平台&#xff0c;支持人民币买外币商品&#xff1b; 2、知识付费购买优化 3、账号绑定的微信号可解除绑定&#xff1b; 4、其他已知问题修复与优化&#xff1b; 01 商城 1) 新增海外跨境支付系统AsiaPay 在本次升级中&#xff0c;商城支付系统新增…

【面试题】在浏览器地址栏输入URL后会发生什么

1. 地址栏输入后的本地操作 当我们在浏览器的地址栏中&#xff0c;输入xxx内容后&#xff0c;浏览器的进程首先会判断输入的内容&#xff1a; 如果是普通的字符&#xff0c;那浏览器会使用默认的搜索引擎去对于输入的xxx生成URL。如若输入的是网址&#xff0c;那浏览器会拼接…

StarRocks实战——滴滴OLAP的技术实践与发展方向

原文大佬的这篇StarRocks实践文章整体写的很深入&#xff0c;介绍了StarRocks数仓架构设计、物化视图加速实时看板、全局字典精确去重等内容&#xff0c;这里直接摘抄下来用作学习和知识沉淀。 目录 一、背景介绍 1.1 滴滴OLAP的发展历程 1.2 OLAP引擎存在的痛点 1.2.1 运维…

在 Jupyter Notebook 中查看所使用的 Python 版本和 Python 解释器路径

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 我们在做 Python 开发时&#xff0c;有时在我们的服务器上可能安装了多个 Python 版本。 使用 conda info --envs 可以列出所有的 conda 环境。当在 Linux 服务器上使用 which python 命令时&#xff0…

【数据结构与算法】回溯法解题20240229

【数据结构与算法】回溯法解题20240229 一、46. 全排列1、以[1,2,3]为例&#xff0c;抽象成树形结构2、回溯三部曲 二、LCR 084. 全排列 II1、以[1,1,2]为例&#xff0c;抽象成树形结构 三、面试题 08.07. 无重复字符串的排列组合四、面试题 08.08. 有重复字符串的排列组合 一、…

代码随想录-力扣刷题-总结笔记01

代码随想录&#xff1a;代码随想录力扣&#xff1a;力扣 (LeetCode) 全球极客挚爱的技术成长平台 目录 01、代码随想录 00、琐碎知识点 01、数组 02、链表 03、哈希表 04、字符串 05、双指针法 06、栈与队列 6.1、栈 6.2、队列 07、二叉树 7.1、前中后序-递归遍历 …

UTONMOS元宇宙游戏发展趋势是什么?

UTONMOS元宇宙游戏的发展趋势包括以下几个方面&#xff1a; 更加真实的体验&#xff1a;随着技术的进步&#xff0c;UTONMOS元宇宙游戏将提供更加逼真的视觉、听觉和触觉体验&#xff0c;让玩家更加身临其境。 社交互动&#xff1a;UTONMOS元宇宙游戏将越来越注重社交互动&am…

Premiere水墨风格婚纱照片婚礼视频模板|PR婚庆后期剪辑模板

时尚大气水墨风格婚纱照片展示&#xff0c;婚礼视频制作PR模板&#xff0c;婚庆后期剪辑模板MOGRT。 主要特点&#xff1a;高清&#xff08;19201080&#xff09;分辨率/30帧/秒&#xff0c;Premiere Pro 2022或更高版本软件&#xff0c;易于定制&#xff0c;持续时间00:50秒&a…

猫头虎分享已解决Bug || 虚拟网络问题(Virtual Network Issue):VirtualNetworkError, VNetFailure

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

IPD(集成产品开发)—核心思想

企业发展到一定阶段就会遇到管理瓶颈&#xff0c;IPD流程是一种高度结构化的产品开发流程&#xff0c;它集成了业界很多优秀的产品开发方法论&#xff0c;像搭积木一样的组合成一种非常有效的流程。如果我们能根据企业的规模和行业特点&#xff0c;对全流程的IPD进行合适的裁剪…

陪诊小程序:温暖您的就医之路,让关怀触手可及

随着社会的进步和科技的发展&#xff0c;人们对于医疗健康的需求日益增长。然而&#xff0c;在繁忙的生活节奏中&#xff0c;许多人在面对就医时却面临着无人陪伴的困境。为了解决这一问题&#xff0c;陪诊小程序应运而生。 陪诊小程序是一种便捷、高效、人性化的医疗服务应用…

Python正则表达式:从基础到高级应用的全面总结与实战【第103篇—JSON模块】

Python正则表达式&#xff1a;从基础到高级应用的全面总结与实战 正则表达式是一种强大的文本匹配和处理工具&#xff0c;广泛应用于文本处理、数据抽取、表单验证等领域。本文将从正则表达式的基础知识出发&#xff0c;逐步深入&#xff0c;最终结合代码实战&#xff0c;带你…

【代码随想录python笔记整理】第十四课 · 链表的基础操作 2

前言:本笔记仅仅只是对内容的整理和自行消化&#xff0c;并不是完整内容&#xff0c;如有侵权&#xff0c;联系立删。 一、分析题目要求 在前面一课中&#xff0c;我们学习了链表的创建以及新元素的插入&#xff0c;并且我们学会了打印链表中的元素。这节课我们依托上节课的基础…

DataGrip 2023:让数据库开发变得更简单、更高效 mac/win版

JetBrains DataGrip 2023是一款功能强大的数据库IDE&#xff0c;专为数据库开发和管理而设计。通过DataGrip&#xff0c;您可以连接到各种关系型数据库管理系统(RDBMS)&#xff0c;并使用其提供的一组工具来查询、管理、编辑和开发数据库。 DataGrip 2023 软件获取 DataGrip …

2024深度学习主流框架对比

tensorFlow 是最受欢迎和广泛使用的深度学习框架之一&#xff0c;目前在github的start数为181k。 TensorFlow是一个由Google Brain团队开发的开源深度学习框架。它允许开发者创建多种机器学习模型&#xff0c;包括卷积神经网络、循环神经网络和深度神经网络等&#xff0c;该框架…

如何在服务器正确读取resources目录下的文件

1、错误代码 InputStream is new BufferedInputStream(new ClassPathResource("fonts/SourceHanSans-Normal.ttc").getInputStream());文件位置 2、正确代码 ClassPathResource classPathResource new ClassPathResource("fonts/SourceHanSans-Normal.ttc…

Python语言基础与应用-北京大学-陈斌-P29-28-计算和控制流:控制流:上机:基本计算程序-给定y和m,计算y年m月有几天?-上机代码

Python语言基础与应用-北京大学-陈斌-P29-28-计算和控制流&#xff1a;控制流&#xff1a;上机&#xff1a;基本计算程序-给定y和m&#xff0c;计算y年m月有几天?-上机代码 # 给定y和m&#xff0c;计算y年m月有几天? run_y_m_day { # 把闰年的每月天数存入字典 1:31, 2:29, …

导览系统厂家|景区电子导览|手绘地图|AR导览|语音导览系统

随着元宇宙、VR、AR等新技术的快速发展&#xff0c;旅游服务也更加多元化、智能化。景区导览系统作为旅游服务的重要组成部分&#xff0c;其形式更加多元化智能化。智能导览系统作为一种新的服务方式&#xff0c;能够为游客提供更加便捷的旅游服务和游览体验&#xff0c;也逐渐…