每天一道算法题——青蛙跳台阶

题目描述
一只青蛙一次可以跳上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

你可能感兴趣的:(算法练习,Java,每天一道算法题,算法,剑指offer-java实现,跳台阶)