1. 程式人生 > >劍指offer,每日一練 2018.10.17

劍指offer,每日一練 2018.10.17

今天做的一系列迴歸與迴圈的演算法題(當數學題做)。

1、大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。

n<=39

時間限制:1秒 空間限制:32768K 熱度指數:417477

//斐波那契數列  a[n] = a[n-1] + a[n-2];
function Fibonacci(n)
{
    // write code here
    if(n <= 1) return n;  //因為遞迴,所以前兩個值得自己找出
    else{
        var arr=[];
        arr[0] = 0;
        arr[1] = 1;
        for(var i=2;i<=n;i++){
            arr[i] = arr[i-1] + arr[i-2];
        }
    }
    return arr[n];
}

2、一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。

時間限制:1秒 空間限制:32768K 熱度指數:318040

//典型的找規律的題,當數學題做,先找出算第n個的演算法
//不難發現,a1 = 1; a2 = 2; a3 = 3; a4 = 5; a5 = 8;又是典型的斐波那契數列  
function jumpFloor(number)
{
    // write code here
    var arr = [];
    arr[0] = 0;
    arr[1] = 1;
    arr[2] = 2;
    for(var i=3;i <= number;i++){
        arr[i] = arr[i-1] + arr[i-2];
    }
    return arr[number];
}

3、一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。

時間限制:1秒 空間限制:32768K 熱度指數:249111

//同樣的找規律,得出a1 = 1; a2 = 2; a3 = 4; a4 = 8; a5 = 16;
//不難得出,an = 2^(n-1);即得出演算法
function jumpFloorII(number)
{
    // write code here
    var sum=1;
    if(number == 1) return 1;
    else{
        for(var i=1;i<number;i++){
            sum*=2;
        }
    }
    return sum;
}

4、我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?

時間限制:1秒 空間限制:32768K 熱度指數:222312

//同樣找規律,得出 a1 1 = 1; a2 = 2; a3 = 3; a4 = 5; a5 = 8;
//典型的斐波那契數列
function rectCover(number)
{
    // write code here
    var arr = [];
    arr[0]=0;
    arr[1]=1;
    arr[2]=2;
    for (var i=3;i<=number;i++){
        arr[i] = arr[i-1] + arr[i-2];
    }
    return arr[number];
}