完整代码地址
题目
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路
很明显的求斐波那契数列类型的题目
当跳n级台阶的时候,设跳法有f(n)种
青蛙的第一步,可以跳1级,也可以跳2级(只有这两种选择)
1. 当跳1级的时候,剩下的有f(n-1)种
2. 当跳2级的时候,剩下的有f(n-2)种
so, f(0) = 0, f(1) = 1, f(2) = 2, f(n) = f(n-1) + f(n-2)
代码
public static int JumpFloor(int target) {
if(target <= 0)
return 0;
if(target <= 2)
return target;
int min = 1;
int max = 2;
int fib = 0;
for(int i = 3; i <= target; ++i) {
fib = min + max;
min = max;
max = fib;
}
return fib;
}
测试
public static void main(String[] args) {
test1();
test2();
test3();
}
/**
* 功能测试
*/
private static void test1() {
for(int i = 1; i <= 10; ++i) {
System.out.print(_999_JumpFloor.JumpFloor(i) + " ");
}
System.out.println();
System.out.println();
}
/**
* 性能测试
*/
private static void test2() {
int i = _999_JumpFloor.JumpFloor(20);
System.out.println(i);
i = _999_JumpFloor.JumpFloor(40);
System.out.println(i);
System.out.println();
}
/**
* 极端测试
*/
private static void test3() {
int i = _999_JumpFloor.JumpFloor(-5);
System.out.println(i);
i = _999_JumpFloor.JumpFloor(0);
System.out.println(i);
System.out.println();
}