美文网首页
70.(动态规划)爬楼梯

70.(动态规划)爬楼梯

作者: Ching_Lee | 来源:发表于2018-03-23 13:55 被阅读0次


解决方法1:递归+记忆搜索

/**
 * @param {number} n
 * @return {number}
 */
//爬n阶台阶可以分成两种
//1.爬n-1阶台阶,再爬1阶
//2.爬n-2阶台阶,再爬2阶

//有很多重复的,比如爬n-1阶台阶,就可以分为爬n-2阶台阶再爬1阶,和爬n-3阶台阶再爬两阶。像爬n-2阶台阶就已经用过了
//所以可以使用记忆搜索算法
//也就是使用一个n维数组,arr[n-1]=爬n阶台阶的数目,因为索引是从0开始的
 
  
var climbStairs = function(n) {

    arr=[];
 //给数组所有值初始化为-1
    for(let i=0;i<n;i++)
        arr.push(-1);
   
    return calcWays(n,arr);
};

function calcWays(num){
    //如果爬1阶台阶就是1种
    if(num===1)
        return 1;
    //如果爬2阶台阶,有两种爬法
    if(num===2)
        return 2;
    
    if(arr[num-1]===-1){
        arr[num-1]=calcWays(num-1)+calcWays(num-2);
    }
       
    
    return arr[num-1];
}

使用动态规划

class Solution {
    public int climbStairs(int n) {
        //用动态规划实现
        //第n个的台阶数总是n-1,n-2的台阶数之和
        int []memo=new int[n+1];
        memo[0]=1;
        memo[1]=1;
        for(int i=2;i<memo.length;i++){
            memo[i]=memo[i-1]+memo[i-2];
        }
        
        return memo[n];
    }
}

相关文章

网友评论

      本文标题:70.(动态规划)爬楼梯

      本文链接:https://www.haomeiwen.com/subject/wjfxcftx.html