java数据结构与算法刷题-----LeetCode70:爬楼梯

7-15 估值一亿的AI核心代码 函数封装,含一个字符串中的所有的某个字串全部替换成另一个的函数,还有判断是否独立的函数以上图片来自新浪微博。! 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

  1. 我的思考过程:
  1. 分析已知条件,试图寻找解题思路
  1. 一共n个台阶,每次可爬1或2个台阶
  2. 爬楼梯,不是1就是2
  3. 爬到最后,要不剩下0个台阶,表示爬完,要不剩下1个或两个,如果是1个,就只有爬一个台阶这一条选择。如果是两个,那么可以两次都走1个台阶爬完,或者一次性爬两个台阶,一共两个选择。
  1. 分析结果和已知条件的关系函数方程f(n)
  1. 要的结果是,一共几种方案,也就是每次爬楼梯有多少选择。
  2. 如果只有1个台阶,那么只有1个方案。f(1) = 1
  3. 如果只有2个台阶,那么有2个方案。f(2) = 2
  4. 如果有3个台阶,那么也有两个选择,要么先走1个,剩余2个,要么先走2个,剩余1个。f(3) = f(2)+f(1)
  5. 如果有4个台阶,那么初始也有两个选择,要么先走一个,剩余3个。要么先走2个,剩余2个,f(4) = f(3)+f(2)
  6. 所以可以推出关系方程为f(1) = 1,f(2) = 2,f(n)=f(n-1)+f(n-2)
  1. 根据关系方程,确定代码思路
  1. 递归,如果n=1直接f(1)=1.如果n=2,直接f(2) = 2,如果大于2,直接f(n) = f(n-1)+f(n-2)
  2. 缓存回溯(也算动态规划),一般像这样,获得f(n)需要前面f(n-1)分支的方程,都会有重复演算的资源浪费问题。我们可以回溯,比如f(4) = f(3)+f(2),而f(3) = f(2)+f(1)。可以发现f(2)计算了两次,我们可以缓存起来,遇到算过的,不要重复计算,直接取值
  3. 动态规划,因为f(n) = f(n-1)+f(n-2),只要知道f(1)和f(2),就可以依次向下推出f(3),f(4),所以直接自左向右动态规划即可
  1. 代码
public abstract class Test{
    //递归
    public static int climbStairs1(int n) {
        if(n<=2) return n;
        return climbStairs1(n-1)+climbStairs1(n-2);
    }

    //回溯
    private static HashMap<Integer,Integer> hashMap = new HashMap<>();
    public static int climbStairs2(int n) {
        if(n<=2){
            if(hashMap.get(n)!=null) return hashMap.get(n);
            hashMap.put(n,n);
            return n;
        }
        if(hashMap.get(n)!=null) return hashMap.get(n);
        int result= climbStairs2(n - 1) + climbStairs2(n - 2);
        hashMap.put(n,result);
        return result;

    }
    //动态规划
    public static int climbStairs3(int n) {
        if(n<=2) return n;
        int arr[] = new int[n+1];
        arr[1] = 1;
        arr[2] = 2;
        for(int i = 3;i<=n;i++){
            arr[i] = arr[i-1]+arr[i-2];
        }
        return arr[n];
    }
    //动态规划再次优化
    public static int climbStairs4(int n) {
        if(n<=2) return n;
        int a = 1,b=2,result = 0;
        for(int i = 3;i<=n;i++){
            result = a+b;
            a = b;
            b = result;
        }
        return result;
    }

    public static void main(String[] args) {
        int n = 6;
        System.out.println(climbStairs1(n));
        System.out.println(climbStairs2(n));
        System.out.println(climbStairs3(n));
        System.out.println(climbStairs4(n));
    }

}

刷题一定要坚持,总结套路,不单单要把题做出来,要举一反三,也要参考别人的思路,学习别人解题的优点,找出你觉得可以优化的点。

  1. 单链表解题思路:双指针、快慢指针、反转链表、预先指针
  1. 双指针:对于单链表而言,可以方便的让我们遍历结点,并做一些额外的事
  2. 快慢指针:常用于找链表中点,找循环链表的循环点,一般快指针每次移动两个结点,慢指针每次移动一个结点。
  3. 反转链表:通常有些题,将链表反转后会更好做,一般选用三指针迭代法,递归的空间复杂度有点高
  4. 预先指针:常用于找结点,比如找倒数第3个结点,那么定义两个指针,第一个指针先移动3个结点,然后两个指针一起遍历,当第一个指针遍历完成,第二个指针指向的结点就是要找的结点
  1. 数组解题思路:双指针、三指针,下标标记
  1. 双指针:多用于减少时间复杂度,快速遍历数组
  2. 三指针:多用于二分查找,分为中间指针,左和右指针
  3. 下标标记:常用于在数组范围内找东西,而不想使用额外的空间的情况,比如找数组长度为n,元素取值范围为[1,n]的数组中没有出现的数字,遍历每个元素,然后将对应下标位置的元素变为负数或者超出[1,n]范围的正数,最后没有发生变化的元素,就是缺少的值。
常用元器件使用方法3:电平转换芯片74LVC1T45的使用方法 介绍: 74LVC1T45是一个单位双向可控电平转换芯片。   芯片特性: 1、宽供给电压范围:1.65V到5.5V; 2、3.3V时,可输出24mA电流; 3、最大16uA电能损耗; 4、高噪音抑制;   型号:   引脚: VCC(A) 1 A端和DIR电源 GND 2 地 A 3 数据输入/输出 B 4 ... 阅读详情

相关推荐

解密UFS Explorer:Drobo BeyondRAID数据恢复实战指南

本文详细介绍了使用UFS Explorer Professional Recovery软件中的Drobo BeyondRAID助手进行数据恢复的完整实战流程。当Drobo设备因BeyondRAID配置信息丢失而无法访问时,该工具能安全、只读地扫描硬盘,虚拟重建存储池,帮助用户找回宝贵数据。指南涵盖了从前期准备、硬盘选择、配置扫描到数据安全导出的每一步关键操作与常见问题解决方案。

weixin_29219539的博客 270

LeetCode-70. 爬楼梯(java)

金三银四,又到了刷题月。有时间的话,希望大家还是尽量刷起来咯。帮助往往不是直接体现出来的,但会让你对很多东西的底层实现了解的更深刻。

**My Coding Family** 1280

STM32驱动HC-SR04超声波模块:两种精准测距方案详解

本文详解STM32驱动HC-SR04超声波模块的两种精准测距方案:定时器中断计数法和外部中断边沿检测法。涵盖硬件连接、代码实现与优化技巧,帮助开发者根据精度和复杂度需求选择合适方案,提升超声波测距在嵌入式项目中的稳定性和准确性。

g5h6i的博客 686

[Java·算法·简单]LeetCode70. 爬楼梯

👉️。

九尾狐的yi巴的博客 365

基于Halium 9为小米平板4移植Ubuntu Touch:内核适配与驱动调试实战

在移动设备生态中,Linux内核作为核心,通过硬件抽象层(HAL)管理底层硬件驱动,为上层系统提供统一接口。其模块化设计允许深度定制,是实现跨平台移植的技术基础。Halium项目正是利用这一原理,构建了一个中间层,将安卓内核的硬件支持能力“翻译”成标准Linux发行版能识别的格式,从而在手机、平板等移动设备上运行Ubuntu Touch、postmarketOS等移动Linux系统,极大地拓展了老旧设备的再利用价值。这一技术为开发者提供了在常见安卓硬件上进行Linux系统开发与定制的可能,尤其在嵌入式与物联

weixin_42639246的博客 377

从数学到机床:RTCP背后的几何变换与工业实现

本文深入解析RTCP(Rotary Tool Center Point)技术在五轴数控加工中的核心作用,通过几何变换与运动学原理实现刀尖点跟随,确保加工精度。从数学基础到工业实现,详细探讨了算法架构、机床结构适配及精度保障方法,为数控系统开发和高效加工提供关键技术支撑。

jump7的博客 261

leetcode——爬楼梯(java)

这道题目可以看成斐波那契数列来进行解题,简单易懂。

W_L_MM的博客 509

【学习系列】SAP RAP 2:创建第一个RAP应用

本文介绍了从零开始创建基于SAP RAP(ABAP RESTful Application Programming Model)的Fiori应用的完整流程。首先说明了学习RAP需要结合官方文档和教程,并提供了相关资源链接。文章详细讲解了开发环境的准备要求,包括系统版本、开发工具和基本知识。重点演示了如何通过8个步骤创建支持CRUD操作和草稿功能的RAP应用:1)创建数据库表;2)定义CDS视图实体;3)创建投影视图;4)定义行为;5)创建行为投影;6)定义服务;7)绑定服务;8)添加UI注解。

DeveloperMrMeng的博客 1505

LeetCode 70. 爬楼梯(java详解)

LeetCode 70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 3. 1 阶 + 1 阶 + 1 阶 4. 1 阶 + 2 阶 5. 2 阶 + 1 阶 解题思路 每次可以爬一级或者两级,因此最后

qq_44404493的博客 1577

YOLOv8【第七章:损失函数篇·第1节】一文搞定,IoU系列损失函数!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 1202

RK3399外设驱动之MIPI

RK3399外设驱动之MIPI 文章目录RK3399外设驱动之MIPIMIPI命令解析入口代码mipi显示配置实例rk3399mipi驱动rk mipi驱动注册过程rk32_mipi_dsi.c解析 内核版本 Linux4.4 平台 rk3399 作者 nineyole MIPI命令解析入口代码 MIPI的入口代码如下:kernel\drivers\video\rockchip\screen\lcd_mipi.c static int __init rk_mipi_screen_in

学无止境 2230

LeetCode 70:爬楼梯(Java实现)

LeetCode 70:爬楼梯题目思路1:动态规划代码结果思路2:数学,斐波那契 题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1 阶 + 1 阶 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种...

qq_45093368的博客 832

APP签名验证全栈破解:Frida Hook绕过+算法逆向+Python一键调用(附可运行脚本)

做过APP逆向和爬虫的同学,肯定都被签名验证折磨过:改了一行代码重新打包,APP直接闪退;抓包看到接口有个sign参数,翻遍JS找不到加密逻辑;好不容易找到加密函数,一调用就崩溃。客户端APK签名校验服务端接口签名验证。前者防止你篡改APP,后者防止你伪造请求。很多人卡在第一步,改完APK就闪退,根本没机会碰接口。本文基于真实项目实战,分享一套通用的签名验证破解方案。从客户端APK签名校验的Frida Hook绕过,到服务端sign算法的逆向还原,最后用Python实现一键调用。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 965

java数据结构与算法刷题-----LeetCode70. 爬楼梯

【代码】java数据结构与算法刷题-----LeetCode70. 爬楼梯。

殷志鹏的博客 1130

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

[C++]Leetcode超高效刷题顺序及题目详解笔记(持续更新中)

一.引言 博主最近在LeetCode上用C++练习。一路走来踩过一些坑,做了一些总结和笔记,分享给需要的人。 LeetCode网址:https://leetcode.com/ LeetCode中文版:https://leetcode-cn.com/ 二.刷题指南 LeetCode 是一个非常棒的平台,收集了许多公司的面试题目。相对其他平台而言,有着下面的几个优点: 题目全部来自业内大公司的真实面试不用处理输入输出 精力全放在解决具体问题上题目有丰富的讨论 可以参考别人的思路精确了解自己代码在所有提交代码中

cpb____的博客 2万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

LeetCode刷题汇总

剑指offer 剑指 Offer 03 数组中重复的数字 剑指 Offer 04 二维数组中的查找 剑指 Offer 05 替换空格 剑指 Offer 06 从尾到头打印链表 剑指 Offer 07 重建二叉树 剑指 Offer 09 用两个栈实现队列 剑指 Offer 10- I 斐波那契数列 剑指 Offer 10- II 青蛙跳台阶问题 剑指 Offer 11 旋转数组的最小数字 剑指 Offer 12 矩阵中的路径 剑指 Offer 13 机器人的运动范围 剑指 Offer 14- I 剪绳子 剑指

weixin_44171872的博客 2万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

力扣刷题路线

结合高频题、经典题和算法思想学习建议,分阶段从基础到进阶编排,覆盖所有核心标签,并标注题号与学习方法。:画图模拟快慢指针移动,如移动零时快指针探路、慢指针标记非零位置。:括号生成时,左括号数不能超过n,右括号数不能超过左括号数。:LCA问题中,若左右子树均含目标节点,则当前节点为祖先。:终止条件、递归调用、返回值,如二叉树深度递归返回。:掌握虚拟头节点、递归反转、环形检测。:掌握索引操作、快慢指针、滑动窗口。:熟悉括号匹配、单调栈、层序遍历。:熟悉反转、哈希统计、回文处理。

FAQEW的博客 1819

LeetCode 70 - 爬楼梯

本文介绍了LeetCode第70题“爬楼梯”的解题方法。题目要求计算爬到n阶楼梯的不同方法数,每次可以爬1或2阶。核心思路是将问题转化为斐波那契数列问题,通过动态规划求解。文章详细讲解了三种解法:基础动态规划(O(n)空间)、空间优化动态规划(O(1)空间)和矩阵快速幂(O(log n)时间)。提供了Python、Java和Rust的代码实现,并总结了动态规划的关键点、易错点和优化方向。该问题帮助理解状态转移和空间优化技巧,是动态规划的经典入门题目。

weixin_45980775的博客 1445

leetcode刷题记录

刷题过程记录

洪肥肥的博客 2063

LeetCode 热题 HOT 100 Java题解——70. 爬楼梯

LeetCode 热题 HOT 100 Java题解70. 爬楼梯动态规划复杂度分析 70. 爬楼梯 题目: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意: 给定 n 是一个正整数。 示例: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 动态规划 当前第iii个台阶的跳法要么是第i−2i-2i−2个台阶以下跳2个台阶跳过来,要么就是第i−1i-1i−1个台阶跳一步跳过来,

qq_20067165的博客 249

LeetCode热题100:算法面试通关秘籍与高效刷题指南

算法与数据结构是计算机科学的核心基础,其原理与应用贯穿于软件开发的全生命周期。通过哈希表实现O(1)时间复杂度查询、利用动态规划优化重复计算,这些经典算法思想在系统设计和大数据处理中具有重要价值。LeetCode热题100作为技术面试的高频考点集合,覆盖了数组操作、字符串处理、树形结构等常见场景,特别适合准备FAANG等顶级科技公司面试的开发者。掌握DFS/BFS遍历、双指针技巧等解题模板,不仅能提升编码能力,更能培养工程实践中的算法思维。本文以两数之和、爬楼梯等典型问题为例,详解如何通过分阶段训练和模拟面

weixin_34372728的博客 329

力扣刷题70.爬楼梯(java)

题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 4. 1 阶 + 1 阶 + 1 阶 5. 1 阶 ...

菜不是原罪 328

LeetCode(70):爬楼梯 Climbing Stairs(Java)

2019.7.16 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新) 出差去海南招生三周,今天又要重新开启学习和科研生活了呀~ 斐波那契数列题,具体解析可以参考之前《剑指Offer》刷过的三道题: #数据结构与算法学习笔记#剑指Offer7:斐波那契数列的四种编程实现方法 + 测试用例(Java、C/C++) #数据结构与算法学习笔记#剑指Offer8:普通青蛙跳台阶+变态...

NJU_ChopinXBP的博客 314

【leetcode】70.爬楼梯(动态规划,数学法,开阔思路,java实现)

70. 爬楼梯 难度简单 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? **注意:**给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶 方法一:动态规划 思路和算法 我们用 f(

Viper的程序员修炼手册 1495

可爱宝宝力扣刷题集目录

阿勒八叉

zhuruihe2014的博客 941

力扣刷题笔记:「LeetCode」61 - 70题详解

61. 旋转链表 给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出: 4->5->1->2->3->NULL 解释: 向右旋转 1 步: 5->1->2->3->4->NULL 向右旋转 2 步: 4->5->1->2->3->NULL 示例 2: 输入: 0-&...

weixin_50205273的博客 623
上一篇: java JVM 学习总结YZP专栏---Java内存和内存溢出
下一篇: java数据结构与算法刷题-----LeetCode1:两数之和
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值