算法刷题笔记-青蛙跳台阶

554 阅读1分钟

参考:B站UP--子烁爱学习(推荐大家观看原视频)

  • 题目描述:


  • 题目解析

    • 这是一题动态规划题


    • 第一个问题,跳两阶或者一阶

      • 首先可以确定,跳一阶是一种,跳两阶是两种,从第三阶开始,跳上第三阶梯的方法是前两阶方法之和(因为只能是第三阶梯向下的两个阶梯之内才能跳上去)

      • 举例子:

        • 一级台阶:1

        • 二级台阶:1-2、2

        • 三级台阶:1-2-3、1-3、2-3

        • 四级台阶:1-2-4、2-4、1-2-3-4、1-3-4、2-3-4。也就是从二级台阶起跳[1-2-4、2-4]+从三级台阶起跳[1-2-3-4、1-3-4、2-3-4]

      public int JumpFloor(int target) {
              if(target<2){
                  return target;
              }
              int[] way=new int[target];
              way[0]=1;
              way[1]=2;
              for (int i = 2; i <= target-1; i++) {
                  way[i]=way[i-1]+way[i-2];
              }
              return way[target-1];
          }
    • 第二个问题,跳1-n阶都行

      • 这个题目是上面的进阶版本,比上面的区别就是,从二级台阶开始,每一级台阶就是前面所有台阶方法之和,因为在任意一级台阶都能够跳到当前台阶来

        public int JumpFloor(int target) {
                if(target<2){
                    return target;
                }
                //存放每一级台阶的方法数
                int[] way=new int[target];
                //先确定,无论那一级台阶,都能一步完成
                //这个方法的意思就是,在way数组中每一个元素都变成1(也即一步完成)
                Arrays.fill(way,1);
                way[0]=1;
                for (int i = 2; i <= target-1; i++) {
                //每一级台阶是前面所有台阶方法之和
                	for(int j = 0; j < i;j++){
                	 way[i]+=way[j];
                	}
                   
                }
                return way[target-1];
            }