跳台阶
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
时间限制:1秒 空间限制:32768K 热度指数:475919
本题知识点: 递归
解:
台阶数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
跳法 | 0 | 1 | 2 | 3 | 5 | 8 | 13 | 21 | 34 | 55 |
看到这组数的序列,我们可以看出它其实就是一个斐波那契数列,台阶数为3起,就是前两项之和
解法一:递归法
function jumpFloor(number)
{
// write code here
if(number == 0) return 0;
if(number == 1) return 1;
if(number == 2) return 2;
return jumpFloor(number - 1) + jumpFloor(number -2);
}
时间复杂度:O(N^2)
空间复杂度:O(N)
解法二:数组法
由于递归的方法时间复杂度太高了,我们不妨试试数组的方法。
function jumpFloor(number)
{
var array = [];
array[0] = 0;
array[1] = 1;
array[2] = 2;
for(var i = 3; i <= number; i++){
array[i] = array[i - 1] + array[i - 2];
}
return array[number];
}
时间复杂度:O(N)
空间复杂度:O(N)
解法二:变量法
我们定义的数组,造成了空间较大,采用变量存储的方法优化代码。
function jumpFloor(number)
{
if(number == 0) return 0;
if(number == 1) return 1;
if(number == 2) return 2;
var one = 1;
var two = 2;
var sum = 0;
for(var i = 2;i < number; i++){
sum = two + one;
one = two;
two = sum;
}
return sum;
}
时间复杂度:O(N)
空间复杂度:O(1)(创建了四个对象,是常数,所以可忽略不计)
变态跳台阶
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
时间限制:1秒 空间限制:32768K 热度指数:475919
本题知识点: 递归
解题时发现,结果如下
解法一:pow
function jumpFloorII(number)
{
// write code here
if(number == 0) return 0;
return Math.pow(2, number-1);
}
解法二:移位运算
function jumpFloorII(number)
{
return 1<<(number-1);
}
解法三:幂运算符(**)
function jumpFloorII(number)
{
return 2 ** (number-1);
}