《剑指offer》第10题——矩形覆盖

173 阅读1分钟

题目:

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

思路: 还是斐波那契数列的性质,利用递归或者迭代

Java

package nowcoder;

public class S10_RectCover {
    public int rectCover(int target){
        if (target <= 0)
            return 0;
        else if (target <= 2)
            return target;
        //递归的方法
       /* else
            return rectCover(target-1)+rectCover(target-2);*/
        //迭代的方法
        int f = 2; int g = 1;
        while (--target > 0){
            f = f + g;
            g = f - g;
        }
        return g;
    }
    public static void main(String[] args){
        S10_RectCover s10 = new S10_RectCover();
        System.out.print(s10.rectCover(10));
    }
}

Python

class RectCover:
    def rectCover(self, number):
        res = [0, 1, 2]
        while len(res) <= number:
            res.append(res[-1]+res[-2])
        return res[number]
if __name__ == '__main__':
    test = RectCover()
    print(test.rectCover(10))