java 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
2016-06-20 22:16
465 查看
一只青蛙一次可以跳上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阶后面剩下:f(3-1);第一次跳出2阶,剩下f(3-2);第一次3阶,那么剩下f(3-3).因此结论是
f(3) = f(3-1)+f(3-2)+f(3-3)
f(n)时,会有n中跳的方式,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) = 2*f(n-1)
所以,可以得出结论
其实就是斐波那契数列问题。
假设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阶后面剩下:f(3-1);第一次跳出2阶,剩下f(3-2);第一次3阶,那么剩下f(3-3).因此结论是
f(3) = f(3-1)+f(3-2)+f(3-3)
f(n)时,会有n中跳的方式,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) = 2*f(n-1)
所以,可以得出结论
public class Solution { public int JumpFloorII(int target) { if(target==0){ return 0; } if(target==1){ return 1; } return 2*JumpFloorII(target-1); } }
相关文章推荐
- java web 实现验证码
- Eclipse安装git插件以及关联导入GitHub项目
- JMeter学习-027-JMeter参数文件(脚本分发)路径问题:jmeter.threads.JMeterThread: Test failed! java.lang.IllegalArgumentException: File distributed.csv must exist and be readable解决方法
- Java的不可变类
- java 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- Dubbo,Springmaven,Zookeeper整合
- java的面向对象思想
- java单例模式使用场景
- Java异常处理
- Java - PAT - 1042. 字符统计(20)
- Java Console 输出格式控制
- 约瑟夫问题的另类java实现
- java 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。斐波那契数列的定义如下
- 《Java小游戏实现》:坦克大战(续一)
- 《Thinkinginjava》第6章-访问权限控制
- 关于SpringMVC使用@RequestBody注解接受json格式数据报415错误
- Java(线性代数--逆序数的求算)
- JDK环境变量的配置
- Ubuntu安装JDK
- Struts2输入校验field-validator type 可取得值