参考: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]; }