1.一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
public class Solution {
public int JumpFloor(int target) {
return jump(target);
}
public int jump(int n){
if(n == 1){
return 1;
}
if(n == 2){
return 2;
}
return jump(n-1)+jump(n-2);
}
}
2.一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
public class Solution {
public int JumpFloorII(int target) {
return jump(target);
}
public int jump(int n){
if(n == 1 || n == 0){
return 1;
}
int total = 0;
for(int i=1;i<=n;i++){
total += jump(n-i);
}
return total;
}
}
更简便的方法
public class Solution {
public int JumpFloorII(int target) {
int [] a = new int[target + 1];
a[0] = 1;
a[1] = 1;
for(int i=2;i<=target;i++){
a[i] = jump(i,a);
}
return a[target];
}
public int jump(int n,int []a){
int total = 0;
for(int i=0;i<n;i++){
total = total + a[i];
}
return total;
}
}
动态规划参考博客:
https://blog.csdn.net/u013309870/article/details/75193592
网友评论