算法练习篇之:变态跳台阶

  • 题目描述
  • 解题思路
  • 代码实现
  • 总结

题目描述

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

解题思路

本题不同于之前跳台阶的题目,之前最多可以一次跳2个台阶,而本题所谓变态跳台阶,则一次最多可以跳n个台阶!!!
我们先从一般情况举例:
n = 1时,只有1种跳法,f(1) = 1
n = 2时,会有2种跳的方式,一次1阶或者2阶,既有f(2) = f(2-1) + f(2-2),(注:这里f(2-1)表示第一次跳了一个台阶还剩一个,f(2-2)表示一次直接跳了两个台阶。之后表示形式同为此意!!!)
n = 3时,会有4种跳的方式,(即一次1阶一共三次,2阶+1阶,1阶+2阶,或者一次3阶),那么就是第一次跳出1阶后面剩下:f(3-1);第一次跳出2阶,剩下f(3-2);第一次3阶,那么剩下f(3-3) ,因此结论是f(3) = f(3-1)+f(3-2)+f(3-3)
…后面推论类似
n = n时,会有2*f(n-1)种跳的方式,1阶、2阶…n阶,得出结论:f(n) = f(n-1)+f(n-2)+…+f(n-(n-1)) + f(n-n),即:f(0) + f(1) + f(2) + f(3) + … + f(n-1)
由以上已经是一种结论,但是为了简单,我们可以继续简化:
f(n-1) = f(0) + f(1)+f(2)+f(3) + … + f((n-1)-1) = f(0) + f(1) + f(2) + f(3) + … + f(n-2)

f(n) = f(0) + f(1) + f(2) + f(3) + … + f(n-2) + f(n-1) = f(n-1) + f(n-1)

综上可以得出:f(n) = 2*f(n-1)

代码实现

去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

public class jumpFloor {//跳台阶,斐波那契数列public int jump(int floor){//台阶数为floorif (floor<1){return -1;}if (floor<=2){return floor;}int fn1=1,fn2=2;for (int i=3;i<=floor;i++){fn1=fn2;fn2=2*fn2;}return fn2;}public static void main(String[] args) {jumpFloor test=new jumpFloor();int sum=test.jump(8);System.out.println(sum);}
}

总结

本题来源于面试经典教材《剑指offer》中 归属于斐波那契数列类型题目。
同许多在算法道路上不断前行的人一样,不断练习,修炼自己!
如有博客中存在的疑问或者建议,可以在下方留言一起交流,感谢各位!
最后,感谢AIAS!

觉得本博客有用的客官,可以给个赞鼓励下! 嘿嘿

算法练习篇之:变态跳台阶相关推荐

  1. 算法练习day20——190411(重建二叉树、斐波那契数列、跳台阶、矩形覆盖、变态跳台阶、旋转数组的最小数字、矩阵中的路径)

    1.重建二叉树 根据二叉树的前序遍历和中序遍历的结果,重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. preorder = [3,9,20,15,7].inorder = [9 ...

  2. 剑指Offer #09 变态跳台阶(数列推导)

    题目来源:牛客网-剑指Offer专题 题目地址:变态跳台阶 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 题目解析 这道题有 ...

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

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

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

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

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

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

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

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

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

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

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

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

  9. 剑指offer九:变态跳台阶

    一.题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 二.解题思路 可以延续上一题的思路,逆向思维来考虑这个问题.要想跳到第n级 ...

最新文章

  1. 如何提升科研能力?以下这点最重要!
  2. Android Stadio配置了gralde的本地路径,但是windos 命令行还是会下载gradle
  3. Spring Cloud【Finchley】-13 Eureka Server HA高可用 2个/3个节点的搭建及服务注册调用
  4. 网站apache环境S2-057漏洞 利用POC 远程执行命令漏洞复现
  5. 手动生成function 对应的ABAP class
  6. 安全方向比路由交换难吗_「网工进阶」路由交换:链路聚合的配置,你都会吗...
  7. monk js_对象检测-使用Monk AI进行文档布局分析
  8. tomcat学习笔记(JDK+TOMCAT+AXIS)
  9. d0...while循环结构讲解
  10. Oracle中执行存储过程call和exec区别
  11. (计算机组成原理题目题型总结)第四章:指令系统
  12. mysql多线程复制binlog_MySQL并发复制系列一:binlog组提交 (转载)
  13. linux bind mysql_linux下安装mysql
  14. Go语言的素数对象编程实现及其使用
  15. Python中的stringIO模块
  16. atitit 数据库mysq启动不起来解决方案.docx
  17. NVMe驱动学习记录-1
  18. DBSCAN聚类算法实用案例
  19. 图片/视频获取缩略图的几种方式
  20. 华为手机pc模式机型_哪些手机型号外接便携显示器能实现PC电脑模式

热门文章

  1. 详解C#使用FileSystemWatcher文件监控对象的感受
  2. java font 像素_Java字体前进,字符宽度(Java Font Advance, Char Width)
  3. css marquee属性,css之marquee,让你的文字跳起来
  4. 【聚英云农】花卉行业应用智能灌溉系统优势
  5. 【3D激光SLAM】Livox-mid-360激光雷达ip配置
  6. grafana展示cpu使用率+influxdb
  7. C++连接MySQL数据库
  8. 全渠道时代数字化管理 通天晓软件为消费品行业物流带来新动力
  9. Linux Shell之declare命令
  10. 新型冷却水箱手摇柴油机油泵火箭