【剑指Offer】:矩阵覆盖

来源:互联网 发布:linux 文件高级权限 编辑:程序博客网 时间:2024/05/23 15:38

一:题目描述

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

二:解题分析

完成第n列的拼接,由两个途径

1.小矩阵竖着放,此时实现矩阵全部拼接的方式与拼接 2*(n-1)的矩阵相同

2.小矩阵横着放,则第n-1列与第n列共用横着的小矩阵,此时实现矩阵全部拼接的方式与拼接 2*(n-2)的矩阵相同

所以拼接完2*n的矩阵,共有f(n)=f(n-1)+f(n-2)种方法

三:代码实现

class Solution {public:    int rectCover(int number) {//第n列  采用竖着放,拼接的方法数与f(n-1)相同        //第n列,采用横着放的方式,则n-1列是和共用横着的小矩阵,拼接的方法与f(n-2)相同        //拼接完成第n列,总的方法数f(n)=f(n-1)+f(n-2)        //所以和跳台阶的解法是相同的                vector<int> numOfMethod;        numOfMethod.push_back(0);        numOfMethod.push_back(1);        numOfMethod.push_back(2);        for(int i=3;i<=number;i++)            numOfMethod.push_back(numOfMethod[i-1]+numOfMethod[i-2]);                return numOfMethod[number];    }};

原创粉丝点击