题目一 :斐波那契数列
//递归实现 严重超时
public int fobonacci(int n){
if((n==0)||(n==1)){
return n;
}else{
return fobonacci(n-1)+fobonacci(n-2);
}
}
方法二 :利用循环
public static int fibonacci1(int n) {
int a=0;int b=1;int c=0;
if(n==0||n==1){return n;}
for(int i=2;i<=n;i++){
c=a+b;
a=b;
b=c;
}
return c;
}
题目二 台阶问题 1,2,3,5,8,.......f(n)+f(n-1)
public static int JumpFloor(int target) {
int a=1;int b=2;int c=0;
if(target==1||target==2){
return target;
}
for(int i=3;i<=target;i++){
c=a+b;
a=b;
b=c;
}
return c;
}
题目三 变态台阶问题 f(n)=f(n-1)+f(n-2)+.....+f(2)+f(1)+1
public static int JumpFloorII(int target) {
int a=1;int b=0;
if(target==1){return target;}
for(int i=2;i<=target;i++){
b=2*a;
a=b;
}
return b;
}
题目四:矩形覆盖
第一步如果选择竖方向填充,那么该问题的规模就缩减为对于剩余的2×(number-1)的大矩形的填充
第一步如果选择横方向的填充,则第二排的前面两个小矩形也只能如此填充,那么该问题的规模就缩减为对于剩余的2×(number-2)的大矩形的填充
rectCover(number)=rectCover(number-1)+rectCover(number-2)