美文网首页数据结构算法剑指offerWeb前端之路让前端飞
《剑指offer》— JavaScript(9)变态跳台阶

《剑指offer》— JavaScript(9)变态跳台阶

作者: echoVic | 来源:发表于2017-02-13 13:59 被阅读103次

    变态跳台阶

    题目描述

    一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。


    实现代码

    function jumpFloor(number)
    {
        if (number<0){
            return -1;
        }else if(number <=2){
            return number
        }
        var arr = [];
        arr[0] = 1;
        arr[1] = 1;
        for(var i = 2; i <= number; i++) {
            arr[i] = 2*arr[i - 1];
        }
        return arr[number];
    }
    

    思路一

    延续前一篇文章的思路:

    1. 假定第一次跳的是n阶,那么剩下的是0个台阶,跳法是f(0)=1;
    2. 假定第一次跳的是(n-1)阶,那么剩下的是1个台阶,跳法是f(1)=1;
      ... ...
    3. 假定第一次跳的是1阶,那么剩下的是(n-1)个台阶,跳法是f(n-1);
    4. 以此类推, 由假设得出总跳法为:f(n)=f(n-1)+f(n-2)+···+f(1)+f(0);
    5. 由于f(n-1)=f(0)+f(1)+···f(n-2),
      因此f(n)=(f(0)+f(1)+···f(n-2))+f(n-1)=f(n-1)+f(n-1);
    6. 由此可得
      n=1, f(n)=1
      n>1,且为整数, f(n)=2*f(n-1)

    思路二

    每个台阶都有跳与不跳两种情况(除了最后一个台阶),最后一个台阶必须跳。所以共用2^(n-1)中情况

    function jumpFloorII(number)
    {
        if(number === 0 ){
            return -1;
        }else{
            return Math.pow(2,number-1);
        }
    }
    

    相关文章

      网友评论

        本文标题:《剑指offer》— JavaScript(9)变态跳台阶

        本文链接:https://www.haomeiwen.com/subject/dgozittx.html