博客
关于我
跳台阶
阅读量:579 次
发布时间:2019-03-11

本文共 580 字,大约阅读时间需要 1 分钟。

对于青蛙跳楼梯的问题,假设青蛙可以从台阶1和2起跳,那么我们需要找到青蛙跳到n级台阶的不同方法数。

首先,如果目标台阶数n小于等于2,只有一种或两种方法:

  • 如果n=1,只能有一种方法:1步。
  • 如果n=2,可以两种方法:1+1步,或者2步。

对于n大于2的情况,青蛙的跳法数等于去掉1级台阶后的方法数加上去掉2级台阶后的方法数。即:

  • JumpFloor(n) = JumpFloor(n-1) + JumpFloor(n-2)

这是因为青蛙在到达n级台阶之前,可以选择从n-1级跳过来(此时方法数为JumpFloor(n-1))或者从n-2级跳过来(此时方法数为JumpFloor(n-2))。

通过这个递归关系,可得JumpFloor(n)实际上是斐波那契数列的第n+1项。

public class Solution {    public int JumpFloor(int target) {        if (target <= 2) {            return target;        }        return JumpFloor(target - 1) + JumpFloor(target - 2);    }}

需要注意的是,递归会导致重复计算,较优的做法是使用记忆化技术存储已计算过的结果,避免重复计算,提高效率。

转载地址:http://tistz.baihongyu.com/

你可能感兴趣的文章
吴恩达机器学习课程笔记(英文授课) Lv.1 新手村(回归)
查看>>
pair的用法
查看>>
SQL基本操作命令
查看>>
C# WinForm程序退出的方法
查看>>
ubuntu安装gem和fastlane
查看>>
onFailure unexpected end of stream
查看>>
【echarts】中国地图china.js 在线引用地址
查看>>
Flex 布局的自适应子项内容过长导致其被撑大问题
查看>>
PL/SQL 动态Sql拼接where条件
查看>>
Lua-table 一种更少访问的安全取值方式
查看>>
虚函数
查看>>
Error:Cannot read packageName from AndroidManifest.xml
查看>>
RTL设计- 多时钟域按顺序复位释放
查看>>
斐波那契数列两种算法的时间复杂度
查看>>
【自学Flutter】4.1 Material Design字体图标的使用(icon)
查看>>
C++清空队列(queue)方法
查看>>
【换行符】什么时候用cin.get()吃掉输入流中的换行符
查看>>
【二叉树】已知后序与中序求先序
查看>>
解决Nginx 404 not found问题
查看>>
计算机网络之第三章笔记--数据链路层
查看>>