10.矩形覆盖

旧城冷巷雨未停 提交于 2019-12-19 11:44:03

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

题目分析:斐波那契数列的变形.
当number=0,返回0;当number=1,返回1;当number=2,返回2.
当number>3时,分两种情况:
1)首先横着放,即第一次摆放一块 12 的小矩阵,则它下方的12小矩阵也固定了,则摆放方法总共为f(target - 2)
2)首先竖着放,即第一次摆放一块 2*1 的小矩阵,则摆放方法总共为f(target - 1)
则:摆放方式总共有f(target-1)+f(target-2)种.即斐波那契数列.

class Solution:
    def rectCover(self, number):
        if number == 0:
            return 0
        elif number == 1:
            return 1
        elif number == 2:
            return 2
        else:
            temp = 3
            init = []
            init.extend([0, 1, 2])
            while temp <= number:
                init.append(init[temp-1] + init[temp-2])
                temp += 1
            return init[-1]

c++:

class Solution {
public:
    int rectCover(int number) {
        if(number==0) return 0;
        else if(number==1) return 1;
        else if(number==2) return 2;
        else{
            int temp = 3;
            vector<int> init={0,1,2};
            while(temp<=number){
                init.push_back(init[temp-1]+init[temp-2]);
                temp++;
            }
            return init.back();
        }
    }
};
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!