70.(动态规划)爬楼梯



解决方法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];
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,244评论 25 709
  • 本章主要讲股神巴菲特的办公室有幅海报,棒球手 泰德·威廉斯真准备挥杆,旁边有77个写着数字的棒球组成的矩形图,代表...
    陈小璁阅读 187评论 0 0
  • 2017,10.8号,假期最后的一天,晚上9点30分,我一个人坐在小区楼顶天棚的沙发上,这个沙发是小区住户丢...
    大富的生活阅读 311评论 0 0
  • 晚上和胖子下楼去吃烧烤 问胖子: ”如果你有一天走在路上 看见路边有一只毛毛虫 你会踩死它吗?“ 胖子答:“我不会...
    王大蘑菇Michelle阅读 272评论 0 0
  • 下午的阳光有点烈, 我躺在一把木椅上, 眯着眼睛,打着盹, 优美的英文歌从耳塞里传出来, 曲调正适合这样的场景。 ...
    清水浮萍阅读 535评论 0 0