描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
1)方法一:动态规划
function jumpFloor(number)
{
let res = [];
res[0] = 1;
res[1] = 1;
res[2] = 2;
for(let i=3; i<=number; i++){
res[i] = res[i-1] + res[i-2];
}
return res[number];
}
module.exports = {
jumpFloor : jumpFloor
};
时间复杂度:O(2^n)
空间复杂度:递归栈的空间
2)方法二:递归,时间复杂度高
function jumpFloor(number)
{
if(number === 1) { return 1; }
if(number === 2) { return 2; }
return jumpFloor(number-1) + jumpFloor(number-2);
}
module.exports = {
jumpFloor : jumpFloor
};
时间复杂度:O(n)
空间复杂度:O(n)
3)方法三:不占用额外空间
function jumpFloor(number)
{
if(number==0 || number==1){
return 1;
}
let n0 = 1;
let n1 = 1;
let n2 = 2;
for(let i=3;i<=number;i++){
let t = n1;
n1 = n2;
n2 = t+n2;
}
return n2;
}
时间复杂度:O(n)
空间复杂度:O(1)