矩形覆盖

《剑指offer》面试题10(题目二)相关题目:矩形覆盖

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

思路:设2 x n 的大矩形的覆盖方法共有f (n)种,第一个2 x 1的小矩形去覆盖大矩形最左边的时候有2种选择:横着放和竖着放。当竖着放的时候,剩余2 x (n-1)的大矩形共有f(n-1)种方法覆盖;当2 x 1的小矩形横着放在左上角的时候,必须有一个2 x 1的矩形放在左下角,剩余2 x (n-1)的大矩形共有f(n-2)种方法覆盖。故总共的覆盖方法f(n)= f(n-1)+ f(n-2)。

代码如下:

public int rectangleCover(int n) {
    if (n <= 0) {
        return 0;
    } else if (n == 1) {
        return 1;
    } else if (n == 2) {
        return 2;
    } else {
        int num1 = 1;
        int num2 = 2;
        int temp = 0;
        for (int i = 3;i <=n;i++) {
            temp = num1 + num2;
            num1 = num2;
            num2 = temp;
        }
        return temp;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 矩形覆盖 题目描述 我们可以用(2*1)的小矩形横着或者竖着去覆盖更大的矩形。请问用n个(2*1)的小矩形无重叠地...
    echoVic阅读 746评论 0 3
  • 题目:我们可以用 2 * 1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2 * 1 的小矩形无重叠地覆...
    minningl阅读 219评论 0 0
  • 题目描述 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形...
    夏臻Rock阅读 182评论 0 0
  • 本文首发于我的个人博客:尾尾部落 题目描述 我们可以用2 * 1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2...
    繁著阅读 249评论 0 0
  • 题目描述: 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩...
    小歪与大白兔阅读 191评论 0 0