1 问题描述
一个台阶总共有n级,如果一次可以跳1级,也可以跳2级,求总共有多少种跳法。

2 解决方案
2.1 递归法

如果整个台阶只有1级,则显然只有一种跳法。如果台阶有2级,则有两种跳法:一种是分两次跳,每次跳1级;另一种是一次跳2级。

推广到一般情况。则可以把n级台阶时的跳法看成是n的函数,记为f(n)。当n > 2时,第一次跳一级还是两级,决定了后面剩下的台阶的跳法数目的不同:如果第一次只跳一级,则后面剩下的n-1级台阶的跳法数目为f(n-1);如果第一次跳两级,则后面剩下的n-2级台阶的跳法数目为f(n-2)。因此,当n > 2时,n级台阶的不同跳法的总数f(n) = f(n-1) + f(n-2)。其中f(1) = 1,f(2) = 2。

追本溯源,上述问题的本质就是斐波那契数问题。

具体代码如下:

package com.liuzhen.array_2;public class JumpStepProblem {//方法1:递归public int getFibonacci(int n){if(n < 0)return -1;if(n <= 2)return n;return getFibonacci(n-1)+getFibonacci(n-2);}public static void main(String[] args){JumpStepProblem test = new JumpStepProblem();System.out.println("使用递归法求解结果:"+test.getFibonacci(10));}
}

运行结果:

使用递归法求解结果:89

2.2 迭代法
由2.1我们可知跳台阶问题的核心,此处是把2.1 中递归法修改成高效率的迭代法。

package com.liuzhen.array_2;public class JumpStepProblem {//解法2:迭代public int getRecursion(int n){if(n < 0)return -1;if(n <= 2)return n;int temp1 = 1;int temp2 = 2;int result = 0;for(int i = 3;i <= n;i++){result = temp1 + temp2;temp1 = temp2;temp2 = result;}return result;}public static void main(String[] args){JumpStepProblem test = new JumpStepProblem();System.out.println("使用迭代法求解结果:"+test.getRecursion(10));}
}

运行结果:

使用迭代法求解结果:89

Java实现台阶问题相关推荐

  1. 跳台阶算法java,跳台阶(思路和实现)

    下面要给大家分享的实例同样是和跳台阶相关的内容,一起来看看具体的题目,以及解题思路和实现方式吧. 题目: 一只青蛙一次能够跳上1级台阶,也能够跳上2级台阶. 求: 这只青蛙跳上一个n级台阶一共的跳法有 ...

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

    文章目录 题目描述 思路 解法一:递归暴力破解 解法二: 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 思路 解法一 ...

  3. 《LeetCode力扣练习》剑指 Offer 10- II. 青蛙跳台阶问题 Java

    <LeetCode力扣练习>剑指 Offer 10- II. 青蛙跳台阶问题 Java 一.资源 题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总 ...

  4. JAVA实现变态跳台阶问题(《剑指offer》)

    最近在刷<剑指offer>里的编程题,但是网上关于<剑指offer>的解答多半是C或者C++的,而且官方(作者)也是在用C++进行讲解,这里自己用java写了一些题目的解答代码 ...

  5. 【剑指offer - C++/Java】9、变态跳台阶

    题目链接:变态跳台阶 文章目录 1 题目描述 2 题目分析 3 代码 3.1 动态规划算法 3.11 Java代码 3.12 C++代码 3.2 递归算法 3.21 Java代码 3.22 C++代码 ...

  6. 【剑指offer - C++/Java】8、跳台阶

    在线题目链接:跳台阶 文章目录 1.题目描述 2.题目分析 3.代码 3.1 递归方法 3.11 Java代码 3.12 C++代码 3.2 动态规划 3.21 Java代码 3.22 C++代码 3 ...

  7. 蓝桥杯第五届省赛JAVA真题----n级台阶

    有n级台阶.从地面(第0级)出发,首先连续的上台阶,上到不超过第n级的某一个位置后再连续的下台阶,直到回到地面.若每次上下台阶只允许走1级或2级,请问可能的上下台阶的方案数是多少? 特别地,在0级站着 ...

  8. 青蛙跳石头java_青蛙跳台阶(JAVA)与递归问题探究

    青蛙跳台阶JAVA 一只青蛙一次可以跳上一层台阶,也可以跳上两层,求该青蛙跳上n层的台阶总共有多少种跳法(先后次序不同算不同的结果). 思考:可以看出,每次青蛙出脚都会有两种可能,一步或者两步,再次出 ...

  9. python跳台阶_递推典型算法:猴子爬山,跳台阶,爬楼梯(牛客网)、魔法深渊(快手)----Python、Java...

    递推算法的基本思想是把一个复杂的.庞大的计算过程转化为简单过程的多次重复,其首要问题是得到相邻的数据项之间的关系,即递推关系.以猴子爬山为例. 1.问题的提出 一个顽猴在一座有30级太假的小山上爬山活 ...

最新文章

  1. 《剑指offer》第十三题(机器人的运动范围)
  2. java 线程 状态 图_Java线程中的生命周期和状态控制图文详解
  3. 产品经理和UX设计师,变革已可期
  4. html字符串转换jsx,javascript – 将React.element转换为JSX字符串
  5. Docker 方式安装 RabbitMQ (ribbitmq linux 部署)
  6. I/0口输入输出实验 将P1口的某一位作为输入使用,连接一个按键,当按键按下时使发光二极管亮,否则发光二极管熄灭
  7. 大数据与BI的区别在于哪里
  8. html 在线申请,25个在线工作申请免费HTML的简历模板
  9. 华为Smartkit CRU和FRU工具使用教程
  10. lamp phpstudy mysql_Phpstudy 搭建服务器教程
  11. B站笔试真题之[编程题]脸滚键盘
  12. Mybatis自定义轻量级分页组件(易集成,易拓展)
  13. C盘清理及可清理文件详解(Windows 7)-简单易操作_让你的C盘彻底解放
  14. Go语言Win10环境配置
  15. 用计算机弹歌曲想起你了,抖音每当我想起你在这秋风里是什么歌
  16. HCIP:rip综合实验
  17. java中\是什么意思?
  18. 数据结构真的很难学?
  19. MacOS虚拟机环境制作交叉编译器步骤
  20. c语言卸载软件官方下载,CCleaner _CCleaner 下载[2021官方最新版]CCleaner 安全下载_ 极速下载...

热门文章

  1. 【兼容性】ios上设置overflow: scroll不滚动bug
  2. ESP8266_STA模式
  3. js求三个数的最大值和最小值
  4. layui富文本编辑器的使用
  5. delphi 解析Json格式
  6. 《代码的第一行——Android》封面诞生
  7. We found potential security vulnerabilities in your dependencies. Only the owner of this reposito...
  8. 服务器显示隐藏任务,在Windows 10中隐藏任务栏的简单方法
  9. 数学の入门到入土 第1天
  10. 给祖国母亲庆生——软件工程总结