题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
测试用例:
0 1 2 3 4 … 38
对应输出应该为:
0 1 2 3 5 … 63245986
题目分析:
这道题把每个数字列出来:
target:0 1 2 3 4 5
result: 0 1 2 3 5 8
这不就是斐波那契数列吗。
则有:
| 1, (n=1)
f(n) = | 2, (n=2)
| f(n-1)+f(n-2) ,(n>2,n为整数)
关于斐波那契数列的几种方法请参考我的另一篇博客:Dawson的博客
1.使用动态规划
public class Test1 {
public int JumpFloor(int target) {
if ( target<= 2) {
return target; //考虑负数,和F(0)F(1)F(2)的情况
}
int[] mark = new int[target + 1];//创建一个大小容纳一个斐波那契数列的数组
mark[0] = 0; //将前两位进行默认地初始化
mark[1] = 1;
mark[2] = 2;
for (int i = 3; i <= target; i++) {
mark[i] = mark[i - 1] + mark[i - 2];//使用递归
}
return mark[target]; //传回数组末尾的值
}
}
2.使用循环:
public class Test1 {
public int Fibonacci(int n) {
int Fn1 = 1;//相当于F(n-1)
int Fn2 = 0;//相当于F(n-2)
int result = 0;
if (n <2)
return n;
for (int i = 2; i <= n; i++) {
result = Fn1 + Fn2;
Fn2 = Fn1;
Fn1 = result;
}
return result;
}
}
运行测试:
第一种:
运行时间:20ms
占用内存:15360k
第二种:
运行时间:21ms
占用内存:15356k