描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
示例1
输入:
3
返回值:
4
Solutions
- 暴力解法+动态规划
public class Solution {
public int JumpFloorII(int target) {
final int[] floor=new int[target+1];
floor[0]=0;
floor[1]=1;
if(1==target){
return floor[target];
}
floor[2]=2;
if(2==target){
return floor[target];
}
for(int i=3;i<=target;i++){
floor[i]=1;
for(int j=1;j<i;j++){
floor[i]=floor[i]+floor[j];
}
}
return floor[target];
}
}
- 精简求解
public class Solution {
public int jumpFloorII(int target) {
if(target<1){
return 0;
}
// 到达第一个台阶的方法只有1种
int result=1;
// 从当前台阶到达下一个台阶的方法也只有一种
int sum=1;
for(int index=2;index<=target;index++){
// 到达当前状态的方法数,其他台阶直接到当前台阶或者一步到位
result=sum+1;
// 累计从目前已知所有台阶出发到达下一个台阶的方法
sum=sum+result;
}
return result;
}
}