题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路:
n为奇数的话,那么多一个竖着的小矩形
n为偶数的话,这时候就是分多少竖着,多少横着,横着就是2个横着,回到了剑指offer第八题跳2还是1的问题了
代码没差别,一样
public class Solution {
public int RectCover(int target) {
if(target <=0)
return 0;
int result =0;
int MaxLenTwo =target/2;
int lenOne;
int lenTwo;
for(lenTwo =0;lenTwo<=MaxLenTwo;lenTwo++){
lenOne = target -lenTwo *2;
result +=Kind(lenOne,lenTwo);
System.out.println(lenOne +" "+ lenTwo +" "+Kind(lenOne,lenTwo) );
}
return result;
}
private int Kind(int lenOne, int lenTwo) {
if( lenOne ==0 || lenTwo ==0)
return 1;
int result =1;
int max = lenOne>lenTwo?lenOne:lenTwo;
int min =lenOne+lenTwo -max;
int[]tag =new int[min];
for(int i=0;i<min;i++){
tag[i] =0;
}
for(int i=0;i<min;i++){
result *=max+min -i;
for(int j=1;j<=min;j++){
if(result%j ==0 && tag[j-1] ==0) {
result /= j;
tag[j-1] =1;
}
}
}
// for(int i=1;i<=min;i++){
// result /= i;
// }
return result;
}
}