Java实现青蛙跳台阶
来源:互联网 发布:佐川一政 知乎 编辑:程序博客网 时间:2024/05/29 17:52
【补充另一种跳台阶的方式于后】
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
我的想法:我记得这是一个斐波那契数列的问题?但是做出来不对。
public class Solution { public static int JumpFloorII(int target) { if(target==1){ return 1; } int next=1; int nn=0; if(target-1>=1) next=JumpFloorII(target-1); if(target-2>=1) nn=JumpFloorII(target-2); int result=Math.max(next,nn); return result; }}
来,学习一下伟大的斐波那契数列吧!
“斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)”
那么回到这个台阶问题:
因为n级台阶,第一步有n种跳法:跳1级、跳2级、到跳n级
跳1级,剩下n-1级,则剩下跳法是f(n-1)
跳2级,剩下n-2级,则剩下跳法是f(n-2)
所以f(n)=f(n-1)+f(n-2)+...+f(1)
因为f(n-1)=f(n-2)+f(n-3)+...+f(1)
所以f(n)=2*f(n-1)
所以如果用递归的话,代码为:
public class Solution { public int JumpFloorII(int target) { if (target <= 0) { return -1; } else if (target == 1) { return 1; } else { return 2 * JumpFloorII(target - 1); } }}
如果是大神的话,代码为:
return 1<<--number;
当target等于1时,有1种跳法1<<--1
target=2时,有2种跳法1<<--2
target=3时,有4种跳法1<<--3
target=4时,有8中跳法1<<--4
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
这个跟之前的不一样在于,要么跳1个,要么跳2个,没有其他的跳法了。
这里的递推公式是:
f(1)=1;
f(2)=2;
f(3)=f(1)+f(2)
f(4)=f(3)+f(2)
.....
f(n)=f(n-1)+f(n-2);
所以我的递归代码,574ms
public class Solution { public int JumpFloor(int target) { if (target <= 0) { return 0; } if (target == 1) { return 1; } if (target == 2) { return 2; } int sum=JumpFloor(target-1)+JumpFloor(target-2); return sum; }}
但是大神认为用递归的时间可能太长了,提出了另一种思路: 29ms
public class Solution { public int JumpFloor(int target) { if (target <= 0) { return 0; } if (target == 1) { return 1; } if (target == 2) { return 2; } int first = 1; int second = 2; int third = 0; for(int i = 3; i <= target; i++) { third = first + second; first = second; second = third; } return third; }}
f(1)=1;
f(2)=2;
f(3)=f(1)+f(2)
f(4)=f(3)+f(2)
f(5)=f(4)+f(3)
看出规律了吗,这里直接用循环就可以了,不需要递归,因为之前的f(3)f(4)都已经计算过了~~
阅读全文
0 0
- Java实现青蛙跳台阶
- 青蛙跳台阶问题 java实现
- Java-青蛙跳台阶
- 青蛙跳台阶(java)
- 《剑指offer2》问题10 青蛙跳台阶&&变态跳台阶 Java实现
- 青蛙跳台阶问题
- 青蛙跳台阶问题
- 青蛙跳台阶问题
- 青蛙跳台阶问题
- 青蛙跳台阶
- 青蛙跳台阶问题
- 青蛙跳台阶问题
- 青蛙跳台阶问题
- 青蛙跳台阶问题
- 青蛙跳台阶2
- 青蛙跳台阶
- 青蛙跳台阶问题
- 青蛙跳台阶
- 【前端】元素关系和选择器
- Android AudioRecord和AudioTrack介绍
- B. Sagheer, the Hausmeister
- intellij-idea-plugin-(插件开发资料)
- linux基础命令介绍九:进程与内存
- Java实现青蛙跳台阶
- Android View基础知识点
- [noip2013] 货车运输(最大生成树+并查集+LCA)
- 数组的操作(一)
- EL表达式
- Android
- Cocoapods 安装(Mac OSX 10.12以后)
- 前端实现图片(img)预加载
- Js apply()和call()使用详解