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

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



题目

题目链接

       三步问题。有个小孩正在上楼梯,楼梯有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)

相关文章
|
6月前
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
2月前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
116 2
|
4月前
|
安全 Java 应用服务中间件
JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
什么是类加载器,类加载器有哪些;什么是双亲委派模型,JVM为什么采用双亲委派机制,打破双亲委派机制;类装载的执行过程
111 35
JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
|
2月前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
5月前
|
消息中间件 NoSQL 领域建模
这些年背过的面试题——领域模型落地篇
本文是技术人面试系列领域模型落地篇,也是面试题系列的完结篇,感谢大家对本系列文章的支持~面试中关于领域模型落地都需要了解哪些内容?一文带你详细了解,欢迎收藏!
|
5月前
|
机器学习/深度学习 算法 数据挖掘
|
6月前
|
消息中间件 编解码 网络协议
京东面试 rockmq是推消息还是拉消息?他的消息模型是啥?
RocketMQ采用拉模式结合长轮询模拟推效果,减少延迟并优化资源使用。在长轮询中,服务器在无消息时保持请求开放,待有新消息时立即响应,提升实时性。利用Netty的TCP连接和异步处理,RocketMQ构建高效通信协议,适应不同吞吐量和实时性需求场景,兼顾控制与实时响应。
60 0
京东面试 rockmq是推消息还是拉消息?他的消息模型是啥?
|
6月前
|
存储 算法 安全
Java面试题:给定一个可能产生内存泄漏的场景,如何诊断并解决?实现一个生产者-消费者模型,使用适当的同步机制与并发工具类,Java并发工具包与框架:性能与调优
Java面试题:给定一个可能产生内存泄漏的场景,如何诊断并解决?实现一个生产者-消费者模型,使用适当的同步机制与并发工具类,Java并发工具包与框架:性能与调优
44 0
|
8月前
|
消息中间件 监控 Java
滴滴面试:谈谈你对Netty线程模型的理解?
Netty 线程模型是指 Netty 框架为了提供高性能、高并发的网络通信,而设计的管理和利用线程的策略和机制。 **Netty 线程模型被称为 Reactor(响应式)模型/模式,它是基于 NIO 多路复用模型的一种升级,它的核心思想是将 IO 事件和业务处理进行分离,使用一个或多个线程来执行任务的一种机制。** ## 1.**Reactor三大组件** Reactor 包含以下三大组件: ![image.png](https://cdn.nlark.com/yuque/0/2024/png/92791/1717079218890-89000a00-48bc-4a1a-b87e-e1b6
79 2
|
8月前
|
微服务 中间件 Nacos
01.【微服务架构】服务注册与发现:AP和CP,你选哪个?-- 面试准备+基本模型
【5月更文挑战第2天】面试准备应涵盖公司所使用的注册中心类型及其优缺点,了解其集群规模、QPS和机器性能。准备故障排查及优化案例。若公司未采用微服务,可熟悉ZooKeeper、Nacos或etcd的基本特性以讨论注册中心概念。面试时,可将话题引导至服务注册与发现,如被问及特定中间件,阐述为何选择它并讨论优缺点。当涉及微服务高可用性时,可强调服务注册与发现的作用。基础模型部分,需解释服务上线和下线流程,提及注册数据和分组功能,并举例说明。最后,简述服务注册与发现的高可用挑战。
158 8