1. 程式人生 > 實用技巧 >一週刷完劍指offer-10-矩形覆蓋

一週刷完劍指offer-10-矩形覆蓋

矩形覆蓋

1. 題目描述

我們可以用2 * 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 * 1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?

2. 示例

比如n=3時,2*3的矩形塊有3種覆蓋方法:

3. 解題思路

還是找規律的一道題,歸根結底還是 斐波那契數列

如果是n=1 -> 1種

如果是n=2 -> 2種

如果是n=3 -> 3種

如果是n=4 -> 5種

注意,這裡Python使用遞迴方法也是不能通過的,超過執行所要求的的時間

4. Java實現

public class Solution {
    public int RectCover(int target) {
        if (target <= 0) return 0;
        if (target == 1) return 1;
        if (target == 2) return 2;
        
        return (RectCover(target - 1) + RectCover(target - 2));

    }
}

5. Python實現

# -*- coding:utf-8 -*-
class Solution:
    def rectCover(self, number):
        # write code here
        if number <= 0:
            return 0
        if number == 1:
            return 1
        if number == 2:
            return 2
        
        a, b = 1, 2
        for i in range(number-2):
            a, b = b, a+b
        return b

如果您覺得本文有用,請點個“在看”