跳台阶/矩形覆盖
题目描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
题目思路:
n级台阶可以简化为(n-1)跳一级,(n-2)跳两级,所以f(n) = f(n-1) + f(n-2)。目前能理解到有下列两种方案。
代码(Java实现)
//第一种方案,耗时约500ms
public class Solution {
public static int num = 0;
public int JumpFloor(int target) {
if(target == 0){ //无台阶
return 0;
}else if(target == 1){ //只有一级台阶
return 1;
}else if(target == 2){ //只有两级台阶
return 2;
}else{
return JumpFloor(target - 1) + JumpFloor(target - 2); //超过两级台阶
}
}
}
//第二种方案
public class Solution {
public static int num = 0;
public int JumpFloor(int target) {
if(target == 0){
return 0;
}else if(target == 1){
return 1;
}else if(target == 2){
return 2;
}else{
int pre = 1; //f(n-2)
int mid = 2; //f(n-1)
int after = 0; //f(n)
for(int i = 3; i <= target; i++){
after = pre + mid;
pre = mid;
mid = after;
}
return after;
}
}
}
跳台阶
题目描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
题目思路:
一直往下简化为f(1)+f(2),并累加。
代码实现(Java):
public class Solution {
public int JumpFloorII(int target) {
if(target==0 || target==1){
return 1;
} else if(target == 2){
return 2;
}else{
int sum = 0;
for(int i = 0; i < target; i++){
sum += JumpFloorII(i);
}
return sum;
}
}
}