變態(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ù)前一篇文章的思路:
- 假定第一次跳的是n階,那么剩下的是0個臺階,跳法是f(0)=1;
- 假定第一次跳的是(n-1)階,那么剩下的是1個臺階,跳法是f(1)=1;
... ... - 假定第一次跳的是1階,那么剩下的是(n-1)個臺階,跳法是f(n-1);
- 以此類推, 由假設(shè)得出總跳法為:f(n)=f(n-1)+f(n-2)+···+f(1)+f(0);
- 由于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); - 由此可得
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);
}
}