题目描述
我们可以用2*1
的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1
的小矩形无重叠地覆盖一个2*n
的大矩形,总共有多少种方法?
比如n=3
时,2*3
的矩形块有3
种覆盖方法:
思路分析
覆盖2*n
的大矩形,有两种覆盖方式,横着覆盖或者竖着覆盖,横着覆盖需要2
个小矩形去覆盖,竖着覆盖需要1
个矩形去覆盖;当n=3
,横着放需要2
个,剩下1
个可以放左右,竖着放要3
个,公式:f(n)=f(n-1)+f(n-2)
,这也是斐波拉契的应用;
代码实现
public class Solution {
public int RectCover(int target) {
if (target == 0) {
return 0;
} else if (target == 1) {
return 1;
} else if (target == 2) {
return 2;
}else{
return RectCover(target - 1) + RectCover(target - 2);
}
}
}