leetcode 70. 爬楼梯

深度优先搜索方法的实现:出现超时。

/**
 * @param {number} n
 * @return {number}
 */
var cnt=0;
var deepSearch = function(curLevel,n){
    if(curLevel >= n){
        if(curLevel==n){
            cnt++;
        }
        return;
    }else{
        let newLevel = curLevel+1;
        deepSearch(newLevel,n);
        newLevel = curLevel+2;
        deepSearch(newLevel,n);
    }
}

var climbStairs = function(n) {
    cnt = 0;
    deepSearch(0,n,cnt);
    return cnt;
};

 递归方式实现,依然超时:

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

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

采取状态压缩的策略,只需要记录三个变量即可:

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

var climbStairs = function(n) {
    let a = 1;//0
    let b = 1;//1
    if(n==0||n==1){
        return 1;
    } else {
        for(let i = 2;i<=n;i++){
            res = a+b;
            a = b;
            b = res;
        }
        return b;
    }
};

 

上一篇:JavaLinux中文文件名乱码,大厂面经合集


下一篇:致Android开发工程师:过了笔试,千万别栽在自己最擅长得技术面试上——70道Android技术面试题分享