《劍指offer》— JavaScript(9)變態(tài)跳臺階

變態(tài)跳臺階

題目描述

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


實現(xià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];
}

思路一

延續(xù)前一篇文章的思路:

  1. 假定第一次跳的是n階,那么剩下的是0個臺階,跳法是f(0)=1;
  2. 假定第一次跳的是(n-1)階,那么剩下的是1個臺階,跳法是f(1)=1;
    ... ...
  3. 假定第一次跳的是1階,那么剩下的是(n-1)個臺階,跳法是f(n-1);
  4. 以此類推, 由假設(shè)得出總跳法為: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,且為整數(shù), f(n)=2*f(n-1)

思路二

每個臺階都有跳與不跳兩種情況(除了最后一個臺階),最后一個臺階必須跳。所以共用2^(n-1)中情況

function jumpFloorII(number)
{
    if(number === 0 ){
        return -1;
    }else{
        return Math.pow(2,number-1);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容