【剑指offer】10矩阵覆盖

原创博文,转载请注明出处!

0.简介

# 本文是牛客网《剑指offer》刷题笔记,笔记索引链接

1.题目

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

2.思路

                                           剑指Offer(十):矩形覆盖

# 2*1的矩阵覆盖2*8的矩阵的方法f(8):用第一个1*2矩阵覆盖2*8矩阵的最左边时有竖着或横着两种方法。

当1*2矩阵竖着放时,2*8矩阵右边剩余2*7的区域,覆盖2*7区域的方法记为f(7);

当1*2矩阵横着放时,2*8左上角放一个1*2的矩阵,则2*8左下角必须放一个1*2的矩阵,2*8右边剩余2*6的区域,覆盖2*6区域的方法记为f(6)。

结论:用1*2的矩阵覆盖2*8的矩阵的方法归纳为f(8) = f(7)+f(6)

3.code

# 返回值:用1*2矩阵无重叠覆盖2*n的矩阵的方法数

# 参   数:矩阵的长度n

  1 class Solution {
  2 public:
  3     int rectCover(int number) {
  4         if(number<=0)
  5             return 0;
  6         if(number<3)
  7             return number;
  8 
  9         int a=1;
 10         int b=2;
 11         int c=0;
 12         for(int i=3;i<=number;++i){
 13             c=a+b;
 14             a=b;
 15             b=c;
 16         }
 17         return c;
 18     }
 19 };

 

posted @ 2018-03-08 10:32  wanglei5205  阅读(400)  评论(0编辑  收藏  举报
levels of contents