力扣一日一练(7)——爬楼梯(斐波那契数列)

题目:爬楼梯(斐波那契数列)

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

示例:

示例 1:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1.  1 阶 + 1 阶
2.  2 阶

示例 2:

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1.  1 阶 + 1 阶 + 1 阶
2.  1 阶 + 2 阶
3.  2 阶 + 1 阶

使用语言JavaScript:

斐波那契数列公式法:

/**
 * @param {number} n
 * @return {number}
 */

var climbStairs = function(n) {
    var sum=0;
    sum=1/Math.sqrt(5)*(Math.pow((1+Math.sqrt(5))/2,n+1)-Math.pow((1-Math.sqrt(5))/2,n+1))
    return sum;
  
};

分析:

斐波那契数列是一个很有名的公式,就是数列从第3项开始,每一项都等于前两项之和。这就相当于我们只需要将数值前两项的值推导出来就可以了,一开始我使用了递归的做法,没想到计算超时了。后来我直接输入斐波那契数列的公式,就直接成功了。我也尝试了一下使用数组的做法,也成功了,只有递归算法不用记忆化计算会超出计算时间。

另外两种方法代码如下:

暴力递归方法:

/**
 * @param {number} n
 * @return {number}
 */

var climbStairs = function(n) {
    var sum=0;
    if(n==1){
        return 1;
    }
    if(n==2){
        return 2;
    }
    sum = climbStairs(n-2)+climbStairs(n-1);
 
    return sum;
  
};

数组方法:

/**
 * @param {number} n
 * @return {number}
 */

var climbStairs = function(n) {
    //数组方法
    var array=[];
    if (n == 0){
        return 1;
    }    
    array[0] = 1;
    array[1] = 1;
    for (var i = 2; i <= n; i++) {
        array[i] = array[i - 1] + array[i - 2];
    }
    return array[n];
 
};

猜你喜欢

转载自blog.csdn.net/qq_36171287/article/details/89521779
今日推荐