跳台阶题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
题解
跳n级台阶相当于跳n-1级台阶和跳n-2级台阶的方法的总和,如果将跳n级台阶的方法看作是f(n),n-1台阶的方法是f(n-1),n-2台阶的方法是f(n-2),则
f(n) = f(n-1) + f(n-2)
本质上也是一个斐波那契数列。
function jumpFloor(number)
{
// write code here
if(number <= 2){
return number;
}
var pre1 = 1;
var pre2 = 2;
for(i=3;i<=number;i++){
var cur = pre1 + pre2;
pre1 = pre2;
pre2 = cur;
}
return pre2;
}
变态跳台阶题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
题解
跟上面类似,我们可知f(n) = f(n-1) + f(n-2) + ... + f(2) + f(1)
迭代可知 f(n-1) = f(n-2) + f(n-3) + ... + f(2) + f(1)
两式相减 可得 f(n) = 2f(n-1)
function jumpFloorII(number)
{
// write code here
if(number == 1){
return 1;
}
var res = 1;
for(i=2;i<=number;i++){
cur = 2 * res;
res = cur;
}
return res;
}
或者根据 f(n) = 2f(n-1)
,f(1) = 1
,按照等比数列的公式我们不难得出f(n) = 2 ^ (n-1)
。
function jumpFloorII(number)
{
// write code here
return Math.pow(2,number-1);
}