1. 简单跳台阶

1.1 题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

1.2 解题思路

对于本题,有题目描述可知,每次只能跳一个或者两个台阶,下面找一下规律:
这里假设有n阶台阶时就有f(n)种跳法

  1. 当有1阶台阶时只有一种跳法:f(1) = 1
  2. 当有2阶台阶时就可以有两种跳法:f(2) = 2
  3. 当有3阶台阶时,这时我们先看第一步怎么走,分两种情况:
    当先跳1个台阶,那剩下就是2个台阶,这时剩下的2个台阶最多只有f(2)种跳法; 当先跳2个台阶,那剩下就是1个台阶,就是f(1)种跳法;那么也即是n=3时,两种情况加起来就是:f(3)=f(1)+f(2)
  4. 当有4阶台阶时,同理我们这里也分两种情况:
    当先跳1个台阶,那剩下就是3个台阶,这时剩下的3个台阶最多只有f(3)种跳法; 当先跳2个台阶,那剩下就是2个台阶,就是f(2)种跳法;那么也即是n=4时,两种情况加起来就是:f(4)=f(3)+f(2)

从行面的分析可以看出,这其实是一个斐波那契数列。

1.3 代码

方法1:

public class JumpingStairs {public static void main(String[] args){JumpingStairs mm=new JumpingStairs();int tt=mm.jump(3);System.out.println(tt);              }public int jump(int n){if (n==0)return 0;int f1=1;int f2=2;while(n>1) {  f2 += f1;f1=f2-f1; n--;}return f1;  }}

运行:

3

方法2:

public class JumpingStairs {public static void main(String[] args){JumpingStairs mm=new JumpingStairs();int tt=mm.jump(3);System.out.println(tt);              }public int jump(int target){if(target <= 0) return 0;if(target == 1) return 1;if(target == 2) return 2;int one = 1;int two = 2;int result = 0;for(int i = 2; i < target; i++){result = one+ two;one = two;two = result;}return result;}
}

2. 变态跳台阶

2.1 题目描述

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

2.2 解题思路

这里的f(n) 代表的是n个台阶的跳法数。

  • n = 1时,只有1种跳法,f(1) = 1
  • n = 2时,这里同样按照上面简单跳台阶的分析方式:
    当第一步跳1阶时,那么剩下的1阶只用1种跳法,即f(1);当第一步跳2阶时,那就不剩下阶梯了,也即是f(0)种跳法,这里f(0)=1,代表一步跳到最高层。得到:f(2)=f(1)+f(0)
  • n = 3时,分析同上:
    当第一步跳1阶时,那么剩下的2阶只用f(2)种跳法,即f(2);当第一步跳2阶时,那剩下1个阶梯,只有f(1)种跳法,当第一步跳3阶时,那剩下0个阶梯,这种一步跳法即是f(0)。得到f(3)=f(2)+f(1)+f(0)
  • n = n-1时,会得到:
    f(n-1) = f(0) + f(1) + f(2) + f(3) + … + f(n-2)
  • n = n时,会得到:
    f(n) = f(0) + f(1) + f(2) + f(3) + … + f(n-2)+ f(n-1)

综上:
f(n) = f(0) + f(1) + f(2) + f(3) + … + f(n-2)+ f(n-1)=f(n-1)+f(n-1)= 2*f(n-1)

2.3 代码

public class MetaJumpingStairs {public static void main(String[] args){MetaJumpingStairs mm=new MetaJumpingStairs();int tt=mm.jump(3);System.out.println(tt);              }public int jump(int target){int f=1;if (target<=0)return 0;while(target>1){f=2*f;target--;}return f;}
}

运行:

4

这里仅作学习笔记。

java 简单跳台阶和变态跳台阶相关推荐

  1. python青蛙跳台阶_Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法

    前言 跳台阶.变态跳台阶.矩形覆盖其实都和斐波那契数列是一类问题,文中通过示例代码介绍的非常详细,下面话不多说了,来一起看看详细的介绍吧. 跳台阶 问题描述: 一只青蛙一次可以跳上1级台阶,也可以跳上 ...

  2. 青蛙跳台阶和变态跳台阶

    青蛙跳台阶和变态跳台阶(python.剑指Offer) 一.题目描述 青蛙跳台阶题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的 ...

  3. 7、斐波那契数列、跳台阶、变态跳台阶、矩形覆盖------------剑指offer系列

    题目:斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). f(n) = f(n-1) + f(n-2) 基本思路 这道题在剑指offe ...

  4. 动态规划:青蛙跳台阶、变态跳台阶

    青蛙跳台阶问题是一个简单的动态规划问题. 问题1:普通跳台阶 一只青蛙可以一次跳 1 级台阶或者一次跳 2 级台阶,例如: 跳上第 1 级台阶只有一种跳法:直接跳 1 级即可. 跳上第 2 级台阶有两 ...

  5. 递归和循环:跳台阶和变态跳台阶和矩形覆盖

    题目描述 跳台阶:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 变态跳台阶:一只青蛙一次可以跳上1级台阶,也可以跳上2级--它 ...

  6. 牛客网——跳台阶和变态跳台阶问题

    1.跳台阶 题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种方法? 解答:这种问题一般是有规律的,跳1级台阶,只有1种方法:跳2级台阶,有2种方法:跳2级 ...

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

    跳台阶问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 解法一:target表示距离目标还有多远,进行递归 public class Solution ...

  8. 跳台阶问题 + 变态跳台阶问题 解法(动态规划递归 + 非递归)

    一.跳台阶问题 题目描述: 一个台阶总共有n级,如果一次可以跳1级,也可以跳2级.求总共有多少总跳法,并分析算法的时间复杂度. 通过题目的描述,可以很清晰地看到,这就是一个Fibonacci数列. 递 ...

  9. 一只青蛙跳向三个台阶_9. 变态跳台阶

    一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 1. 思路: 一级台阶:1种方式,1 二级台阶:2种方式,1,1. 2 三级台阶:4种方 ...

最新文章

  1. 文巾解题 595. 大的国家
  2. 台式机计算机怎么分割,编辑手把手教程 如何给电脑硬盘分区
  3. Python学习之web框架 Flask
  4. 为什么php打开网页空白的_PHP页面出现空白页面该怎么办
  5. BZOJ 1688: [Usaco2005 Open]Disease Manangement 疾病管理
  6. Win10使用FFmpeg操作Camera(十)
  7. 数据库中多对多的关系设计
  8. bzoj2958: 序列染色3269: 序列染色
  9. psm倾向得分匹配法举例_倾向得分匹配法的详细解读
  10. Kaavi and Magic Spell
  11. android 卸载残留代码,完全卸载AndroidStudio(示例代码)
  12. python三维建模和cad比较_对比Revit和CAD三维建模的不同
  13. 蓝桥杯学习03-共阳数码管的静态显示
  14. Word:外国人名字字母上加撇,怎么输入
  15. git 删除远程的tag
  16. 将CSS文件转换为标准格式
  17. 高数 01.06极限存在准则
  18. Teamview后台近期被APT41攻破,解决方案
  19. 《室外排水设计标准》GB 50014-2021修订主要内容
  20. 干货 | 常见电路面试题20道,试试你能答对几个!

热门文章

  1. C语言获取链表的中间值Middle of the Linked List(附完整源码)
  2. 9_InfluxDB常用函数(二)选择类函数(TOP() BOTTOM() FIRST() LAST() MAX() MIN() PERCENTILE())
  3. 02_Flink vs storm vs SparkStreaming、Flink vs storm对比图、实时框架如何选择
  4. 2.Maven特点,Maven约定,建立第一个Maven项目
  5. primer premier 5 64位_王者荣耀:必出破军的3位英雄,玩他们不出破军?说明你是个菜鸟!...
  6. 华为android系统最新版,谷歌再放大招截胡鸿蒙系统!发布最新版安卓系统:国产手机抢先升级...
  7. oracle中的open,Oracle 深入分析Open过程
  8. java 初始化二维数组_java二维数组的常见初始化
  9. 深入理解ResNet原理解析及代码实现
  10. OpenCV4.4.0+VS2017 环境配置