zoukankan      html  css  js  c++  java
  • 力扣----11. 爬楼梯(JavaScript实现)

    题目描述:

    假设你正在爬楼梯。需要 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实现:

    如果观察数学规律,可知本题是斐波那契数列,那么用斐波那契数列的公式即可解决问题,公式如下:

    时间复杂度:

    空间复杂度:O(1)

    /**
     * @param {number} n
     * @return {number}
     */
    
    var climbStairs = function(n) {
        const sqrt5 = Math.sqrt(5);
        const fib_n = Math.pow((1+sqrt5)/2,n+1) - Math.pow((1-sqrt5)/2,n+1)
        return Math.round(fib_n/sqrt5)
    };

    动态规划

    时间复杂度:O(n)

    空间复杂度:O(n)

    var climbStairs = function(n) {
        const res = [];
        res[0] = 1;
        res[1] = 1;
        for(let i=2;i<=n;i++) {
            res[i] = res[i-1] +res[i-2]
        }
        return res[n];
    };

    正常思路

    时间复杂度:O(n)

    空间复杂度:O(1)

    var climbStairs = function(n) {
        if(n ===1 || n===0){
            return 1;
        }else{
            var pre = 1;
            var cur = 1;
            for(var i = 2; i <= n; i++){
                cur = pre + cur;
                pre = cur - pre;
            }
            return cur
        }
    }

    递归

    时间复杂度:O(2^n)

    不推荐

    var climbStairs = function(n) {
        let res = 0;
        if(n === 1 || n===0) return 1;
        if(n>1){
            res = climbStairs(n-1) + climbStairs(n-2)
        }
        return res;
    };
  • 相关阅读:
    3.live555源码分析----延时队列
    RTP包的结构
    2.live555源码分析----服务端doEventLoop()函数分析
    1.live555源码分析----RSTPServer创建过程分析
    RTSP协议介绍 (转)
    搭建最简单的流媒体系统(服务器和客户端)
    谈一谈 MPU6050 姿态融合(转)
    Nginx的优化
    LAMP与LNMP加速与缓存优化
    Nginx在LNMP架构中的作用与虚拟主机配置
  • 原文地址:https://www.cnblogs.com/manru75/p/13097592.html
Copyright © 2011-2022 走看看