矩形覆盖

来源:互联网 发布:博雅软件怎么用 编辑:程序博客网 时间:2024/05/18 07:26

问题描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

解题思路
这是一个斐波那契数列。
1. n=0时,return 0
2. n=1时,2*1的小矩形只有一个,大矩形为2*1,故只有一种方法,return 1
3. n=2时,两个小矩形,大矩形为2*2,若小矩形竖着放则为“ | | ”,若小矩形横着放“ = ”,只有两种方法,return 2
4. n>2时,分两步来考虑
- 小矩形竖着覆盖:
- 这里写图片描述
- 则覆盖方法总共有f(n-1)种
- 小矩形横着覆盖
- 这里写图片描述
- 则覆盖方法总共有f(n-2)种
综上 用n个2*1的小矩形无重叠的覆盖一个2*n的大矩形,总共有f(n-1)+f(n-2)种方法

代码如下

public class Solution {    public int RectCover(int target) {        if(target<1)            return 0;        else if(target==1||target==2)            return target;        else             return RectCover(target-1)+RectCover(target-2);    }}
原创粉丝点击