算法题解记录8+++爬楼梯(百日筑基)

2024-04-12 14:36

本文主要是介绍算法题解记录8+++爬楼梯(百日筑基),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述:

        假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

        每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?        

示例 1:

输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶

示例 2:

输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶

提示:

  • 1 <= n <= 45

解题准备:

        1.猜测该题可能涉及的基础操作:目前看不出来。

        2.拿特殊的题目尝试一下:

                可以发现,第一层台阶非常特殊,虽然题目提供两种操作,但是我们只能爬1步,因此只有1种方案。

            3.筛查题目条件:题目仅一个输入,表示有几层台阶。其为我们提供两个操作,一次爬升一楼,或一次爬升两楼。

            4.理解:假设我们想爬第n层台阶,要不从n-1层开始爬,要不从n-2层开始爬【除了n=1的情况,题目提供n>=1】

            5.猜测:由此可以猜测,想知道第n层台阶有几种爬法,极大可能和n-2,n-1这两层台阶有关。

解题难点1分析:

        虽然猜测n层台阶与n-1、n-2可能有关系,但是未证实,其难点,是找到关系内容。

        1:如何找到三者的关系?

                我们的目标是,找到爬n层的所有方案(虽然只要求给出方案的数目),假设采用穷举法。

                假设num【x】表示爬第x层的所有方案数目。(使x>2)【以下的所有数据,默认不超出限制】

                当n=x时,x-1到x,是一种方案,x-2到x,也是一种方案。忽略其它,单单最后一步,一共有两种方案。

                面对x-1,x-3到x-1可以走2步,x-2到x-1可以走1步。同样是两种方案。

                如果爬到x-1和x-2的所有方案num【x-1】和num【x-2】,之间没有重复的序列,就可以证明num【x】=num【x-1】+num【x-2】。

        2:如何证明:x-1和x-2,之间一定不存在重复?

                对于x-1,1st.如果x-1是从x-3直接跳到x-1,那么掠过x-2,不存在重复。【x-3到达x-2也是一个步骤】

                2nd.如果x-1,从x-2爬升到x-1,那么由于x-2到x-1多一步骤,故不重复。

至此证明完毕。

递归代码:

class Solution {public int climbStairs(int n) {if(n==1){return 1;}int[] data=new int[n];data[0]=1;data[1]=2;return helper(n-1, data);}private int helper(int temp, int[] data){if(temp==1){return 2;}else if(temp==0){return 1;}if(data[temp-1]>0&&data[temp-2]>0){return data[temp-1]+data[temp-2];}else if(data[temp-2]>0){return helper(temp-1, data)+data[temp-2];}else if(data[temp-1]>0){return helper(temp-2, data)+data[temp-1];}data[temp]=helper(temp-1, data)+helper(temp-2, data);return data[temp];}
}

以上内容即我想分享的关于力扣热题8的一些知识。

        我是蚊子码农,如有补充,欢迎在评论区留言。个人也是初学者,知识体系可能没有那么完善,希望各位多多指正,谢谢大家。

这篇关于算法题解记录8+++爬楼梯(百日筑基)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/897410

相关文章

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

qtcreater配置opencv遇到的坑及实践记录

《qtcreater配置opencv遇到的坑及实践记录》我配置opencv不管是按照网上的教程还是deepseek发现都有些问题,下面是我的配置方法以及实践成功的心得,感兴趣的朋友跟随小编一起看看吧... 目录电脑环境下载环境变量配置qmake加入外部库测试配置我配置opencv不管是按照网上的教程还是de

使用nohup和--remove-source-files在后台运行rsync并记录日志方式

《使用nohup和--remove-source-files在后台运行rsync并记录日志方式》:本文主要介绍使用nohup和--remove-source-files在后台运行rsync并记录日... 目录一、什么是 --remove-source-files?二、示例命令三、命令详解1. nohup2.

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.