算法练习帖--19--青蛙跳台阶问题(Java)

蓝桥杯算法vip训练习题与答案带测试数据1 里面有300道题目及答案 立即下载

青蛙跳台阶问题

一、题目描述:

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。(类似斐波那契数列)

注意:答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

(题目来源:力扣(LeetCode))

二、提示:

0 <= n <= 100

三、实例
示例 1:
输入:n = 2
输出:2


示例 2:
输入:n = 7
输出:21


示例 3:
输入:n = 0
输出:1
四、解题思路
 n=1,解法1种
 n=2,解法2种
 n=3,解法3种
 n=4,解法5种
 n=5,解法8种
 n=6,解法13种
 n=7,解法21种
 设第n种时我们假设是f(n)
 由推断得f(n)=f(n-1)+(n-2)(根据规律或者根据最后一个数的情况向前推演)
 特殊:n=1和n=2时,直接可以数出为1种和2种
五、解题方法

1. 动态规划

 public int numWays(int n) {
        if(n<0){
            return 0;
        }
        if(n==0||n==1){
            return 1;
        }
        if(n==2){
            return 2;
        }
        //记录前两个数的跳法,这两数跳法相加等于当前数的跳法
        int first=1,second=2;
        int third=0;
        //动态规划,从3开始一直遍历到n
        for(int i=3;i<=n;i++){
            //第三个数等于前两个数相加
            //这里要注意防止第三个数溢出int最大值
            third=(first+second)%1000000007;
            //将第二个数赋值给第一个数
            first=second;
            //将第三个数赋值给第二个数
            second=third;
        }
        return third;
    }

2. 递归+记忆优化
注意:直接递归数会造成反复计算同一个值,不可取,用map存储已经计算完的,如果已经计算完,就没必要继续计算了

	//存储结果的map
    public  Map<Integer,Integer> map=new HashMap<Integer,Integer>();
    
    public int numWays(int n) {
      if(n<0){
            return 0;
        }
        if(n==0||n==1){
            return 1;
        }
        if(n==2){
            return 2;
        }
        //判断map中是否已经计算过n个台阶的解法
        //未解决-->等于上两个值相加,并存储(注意取模)
        if(!map.containsKey(n)){
           map.put(n, (numWays(n-1)+numWays(n-2))%1000000007);
        }
        return map.get(n);
    }
【算法题】青蛙跳台阶问题(附过程取模证明) 题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 示例 1: 输入:n = 2 输出:2 示例 2: 输入:n = 7 输出:21 提示: 0 <= n <= 100 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解体思路 当n = 0,不跳也算 立即下载

相关推荐

地震数据可视化必备:5分钟读懂SEGY道头字段全解析(含坐标定位指南)

本文深入解析了SEGY文件格式中道头坐标字段的提取与可视化方法。针对地震数据处理中的常见痛点,详细介绍了sx/sy、gx/gy等关键坐标字段的二进制解析、比例因子应用、单位转换及常见问题解决方案,并提供了实用的Python代码示例,帮助开发者实现从SEGY文件到三维空间可视化的完整流程。

echo99的专栏 1012

剑指Offer算法题——青蛙跳台阶问题(JAVA)

题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 示例 1: 输入:n = 2 输出:2 示例 2: 输入:n = 7 输出:21 示例 3: 输入:n = 0 输出:1 分析: 我们正向思考问题,一次跳1阶或2阶,这样分析问题,每次都要分成两个分支。我们不如...

阳哥的博客 401

基于STM32F4的NRF24L01驱动程序

基于STM32F4xx的NRF24L01驱动程序 提示:硬件平台基于STM32F427VIT6、NRF24L01模块 文章目录基于STM32F4xx的NRF24L01驱动程序前言一、NRF24L01简单介绍1,什么是NRF24L012,NRF24L01通信方法3,NRF24L01通信原理4,地址分配&通道分配问题二、STM32CubeMX配置三、添加底层文件1,添加.c/.h文件到工程中2,使用说明四,下载 前言 提示:本例程采用STM32CubeMX配置底层,采用硬件SPI方式驱动NRF24

qq_43603289的博客 2815

青蛙跳台阶问题Java版

一、初级版 一只青蛙跳台阶,一次可以跳1阶,可以2阶。那么,台阶为n时,有多少种法? 分析 由于一次只能跳一阶或者两阶,所以: 台阶数为1时:只有一种跳法,f(1)=1; 台阶数为2时:可以一阶一阶跳,也可以一次跳上去,所以f(2)=2; 台阶数为3时:青蛙最后一步只能从第一阶或者第二阶起跳。这样就把三阶分成了两部分,一部分一阶,一部分二阶,把它俩的跳法加起来就是台阶数为3时的跳法。 … 台阶数为...

A_K_L的博客 403

# 执行 DISM 命令时出错 87 未在此上下文中识别出 restorehealth 选项。解决方法

# 执行 DISM 命令时出错 87 未在此上下文中识别出 restorehealth 选项。解决方法

段子手168的博客 1万+

算法竞赛推荐书单

前言 入坑算法竞赛已经一年半了,在这期间也读了不少关于算法竞赛的书,这些书对我的帮助还是蛮大的。平时看题解多是个人零散的题解,很难以系统的去学习,认认真真的挑选1-2本书来阅读,无论是从思维能力还是文字表达能力都会得到提升,以下都是我自己读过的书进行一下分享,难度由浅入深,部分书籍浅尝而止。 入门:《啊哈!算法》 适合:总题量150以下初步掌握C语言的萌新 一本充满智慧和趣味的算法入门书。没有枯燥的描述,没有难懂的公式,一切以实际应用为出发点,通过幽默的语言配以可爱的插图来讲解算法。你更像是在阅读一个个轻松

TGX的博客 8244

经典递归问题:青蛙跳台阶,跳1个,2个或者3个

这个问题经常在各类面试中看到。一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 我们知道如果要写递归代码,那一定要先找到递归公式,这个找法,一个是画执行时的栈结构图来看,一个是从小到大来分析。我们看一下从小到大的过程: 从这里我们可以归纳出,递推公式是f(n)=f(n-1)+f(n-2),然后就可以根据三步走策略来写代码了: 1、确定递归函数功能 假设 f(n) 的功能是求青蛙跳上一个n级的台阶总共有多少种跳法,代码如下: int f(...

纵横千里 捭阖四方 的专栏 7219

【BLE系列-第六篇】GATT解析:属性、特征、描述符的逻辑关系

本文系统介绍了BLE协议中的ATT和GATT机制。ATT以"属性"为基本数据单元,包含UUID、Handle、权限和Value四个要素。GATT则在ATT基础上构建了服务、特征和描述符的层次结构:服务(UUID:0x2800/0x2801)通过声明属性标识,特征声明(UUID:0x2803)指向特征值(UUID:0x2Axx或自定义),描述符(UUID:0x2900~0x290F)提供附加信息。GATT复用ATT发现机制,通过定义特定UUID语义实现服务发现和特征管理。这种设计使BLE设

qq_43399763的博客 1930

每日算法——最全青蛙跳台阶算法问题

Java每日算法之——青蛙跳台阶

weixin_48622530的博客 5096

Gitee自动创建PR之——评审模式

一 创建PR的常规操作 本地更新主干(一般为master分支),基于主干新建一个分支并(如Dev分支)切换; 进行新的需求开发; 将这个分支推送到远端; 打开 Gitee ,进入创建 Pull Request 界面; 选定目标分支(及我们需要合并到主干分支的分支,一般即为我们的开发分支); 填写 Title 以及 Description; 点击提交 Pull Request。 二 更快的常见PR的方式— — 评审模式 现在 Gitee.

calm_encode的博客 3000

【ComfyUI】SD1.5 + ControlNet 边缘检测融合动漫转真人

本文介绍了一个基于ComfyUI的动漫转真人图像生成工作流,通过多模型协同实现高质量的二次元图像转换。该工作流集成了Canny线稿预处理、ControlNet结构控制、VAE编码解码和人脸精细化处理等核心环节,采用majicmixRealistic_v7作为主模型,配合yolov8、SAM等辅助模型。整个流程包含11个标准化步骤,从图像输入、预处理到最终超分输出,通过ControlNet引导和CLIP语义控制确保生成图像的写实感和结构准确性,特别针对人脸区域进行专业优化,最终可输出高分辨率写实人像。

Mr数据杨 1127

【青蛙跳台阶问题 —— (三种算法)】

青蛙跳台阶问题 —— (三种算法)

qq_73900397的博客 1万+

在虚拟机中对阿克曼转向车进行导航及避障的仿真测试

一、    在我使用rosdep install teb_local_planner去安装teb_local_planner的时候,报错:Command ‘rosdep’ not found, but can be installed with:sudo apt install python3-rosdep2    我花大半个月好不容易建立起的一系列ROS环境,被python3-rosdep2这条万恶的语句连同ROS一起给我删了。。。悲伤来的那么猝不及防    随着ROS版本的迭代,相关资料很多都不再适用

慕羽★的博客 3807

【leetcode刷题】30.青蛙跳台阶——Java版

30天了

公号:一条coding 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【Java】动态规划---青蛙跳台阶问题

什么是动态规划? 动态规划算法通常基于一个递推公式及一个或多个初始状态。当前子问题的解将由上一个子问题的解推出。动态规划和分治法相似,都是通过分解,求解,并组合子问题来求解原问题。分治法将问题划分成相互独立互不相交的子问题,递归求解子问题,再将它们的解组合起来,求出原问题的解。与之相反,动态规划应用于子问题重叠的情况,即不同的子问题具有公共的子子问题。在这种情况下,分治算法会做出许多不必要的...

JockLiu的博客 4589

廖雪峰Python教程[完整版]

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

java 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 假设,一级台阶,有f(1)种方法,二级有f(2)种,以此类推,n级有f(n)种方法。 可以看出,f(1)=1;f(2)=2。 那么,假设n级台阶,那么第一步就有两种情况,跳一步,跟跳两步。 情况一:跳一步,那么接下去的就是f(n-1); 情况二:跳两步,那么接下去的就是f(

史迪阳的博客 7421

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LeetCode–青蛙跳台阶问题

LeetCode–青蛙跳台阶问题 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 介绍 剑指 Offer 10- II. 青蛙跳台阶问题 主站70题 题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 示例 1: 输入:n = 2 输出:2示例 2: 输入:n = 7 输出

归子莫的博客 1166

青蛙上台阶问题(Java)

题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思想:首先如果只有1个台阶,那青蛙只有一种跳法;如果有两个台阶,青蛙有两种跳法:一个台阶一个台阶跳;一次跳两个台阶;如果有n(n &gt; 2)个台阶,假设用函数f(n)表示总共跳的方法数,这时青蛙在第一次有两种选择:选择跳一个台阶,则剩下n-1个台阶故剩下的台阶有f(n-1)种跳法;选择跳两个台阶,则...

Sweet Baby,甜宝 3194

牛客网刷题java之变态跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 分析: 其实和普通的只能跳一个和两个台阶的思路是一样的,都是为了求迭代表达式。 普通跳台阶(只能跳1或2): 假设我第一次跳1个,那么剩下的次数就是f(n-1) 假设我第一次跳2个,那么剩下的次数就是f(n-2) 所以f(n)=f(n-1)+f(n-2),然后再加上...

逆水行舟,不进则退 1201

java 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 其实就是斐波那契数列问题。 假设f(n)是n个台阶跳的次数。 f(1) = 1 f(2) 会有两个跳得方式,一次1阶或者2阶,这回归到了问题f(1),f(2) = f(2-1) + f(2-2) f(3) 会有三种跳得方式,1阶、2阶、3阶,那么就是

史迪阳的博客 9705

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

import java.util.Scanner; /* 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。请用递归和循环2中方法实现 答案来源:https://www.cnblogs.com/minrh/p/8496549.html 如有侵权,请联系我删除! */ public class 青蛙 { public static void main(String[] args) { Scanner scanner = new Scann.

qq_42153987的博客 848

剑指offer:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

剑指offer:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 贪心算法,变态跳台阶 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 方法一 通过分析可以发现,跳到当前第n个台阶的跳法数量等于跳到前面第n-1个台阶的跳法数量加上最后一次一步跳到当前台阶跳法,也就是说: f(n) = f(1)+f(2)+...+f(n-2)+f(n-1)+1 ①式

gaozhuang63的博客 809

【Java成王之路】第六篇:Java SE(青蛙跳台阶问题详解)

目录 一、青蛙跳台阶 1.问题描述 2.画图分析 3.问题讲解 4. 代码设计思路 5.实现代码 6. 代码升级 一、青蛙跳台阶 1.问题描述 一只青蛙一次可以跳上1阶台阶,也可以跳上2阶台阶,求该青蛙跳上一个n阶台阶总共有多少种跳法? 2.画图分析 3.问题讲解 一只青蛙,要么1次跳2个台阶,要么1次跳1个台阶。 假设3个台阶为例:如果1次跳1个台阶,那剩下几种跳法?我们来仔细地想一下: 跳了一个台阶之后,剩下的台阶就相当于3 -1个台...

m0_64397675的博客 1551

java 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法

变态跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 其实就是斐波那契数列问题。 假设f(n)是n个台阶跳的次数。 f(1) = 1 f(2) 会有两个跳得方式,一次1阶或者2阶,这回归到了问题f(1),f(2) = f(2-1) + f(2-2) f(3) 会有三种跳得方式,1阶、2阶、3阶,那么就是第一次跳出1阶...

The man was lazy and left no message 1571

跳台阶以及变态跳台阶问题

解法一:target表示距离目标还有多远,进行递归 public class Solution { public int JumpFloor(int target) { if(target==0){ return 0; }else if(target==1){ retur

shl_shl的博客 1723

10.2 青蛙跳台阶问题与矩形覆盖问题

文章目录剑指offer 10-II 青蛙跳台阶问题 LeetCode70解法一:递归方式解法二:循环方式解法三:动态规划青蛙变态台阶与矩形覆盖(剑指offer第十题后面的扩展题)青蛙变态跳台阶解题思路Java代码矩形覆盖解题思路Java代码斐波那契循环写法动态规划写法 剑指offer 10-II 青蛙跳台阶问题 LeetCode70 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:10000

YouMing_Li的博客 677
上一篇: JDK1.8时间工具类
下一篇: ORACLE 批量插入(Insert)详解
Alvin Hansen
博客等级 码龄7年 46粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值