【剑指offer】面试题:跳台阶

来源:互联网 发布:单片机电子时钟原理图 编辑:程序博客网 时间:2024/05/21 17:21

完整代码地址

完整代码地址

题目

一只青蛙一次可以跳上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();}
原创粉丝点击