题目链接:矩形覆盖
题意:
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
解题思路:
将一个问题缩小化,分治法
如果如果选择竖方向填充,那么该问题的规模就缩减为对于剩余的2×(number-1)的大矩形的填充。方法数为 rectCover(n-1)
如果选择横方向的填充,则第二排的前面两个小矩形也只能如此填充,那么该问题的规模就缩减为对于剩余的2×(number-2)的大矩形的填充。方法数为 rectCover(n-2)
加起来即为总数
class Solution {
public:
int rectCover(int number) {
int f1 = 1, f2 = 1;
if(number <= 0){
return 0;
}
else if(number == 1){
return 1;
}
else{
int f3 = 0;
for(int i = 2; i <= number; i++){
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
return f3;
}
}
};