剑指Offer——矩形覆盖

题目描述:

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


分析:

2*n的矩阵可以由2*(n-1)的矩阵竖着放一个小矩阵得到,或者由2*(n-2)的矩阵横着放两块小矩阵得到。

建模之后便是斐波那契数列的求解。


代码:

 1 class Solution {
 2 public:
 3     int rectCover(int number) {
 4         if(number == 0) return 0;
 5         int a = 1, b = 1;   // a是b的前一个值
 6         for(int i = 2; i <= number; i++) {   // 循环后移求出下一个b值,a一直是b的前一个值
 7             b += a; // 求出下一个值
 8             a = b - a;  // a等于之前的b值
 9         }
10         return b;
11     }
12 };

 

posted @ 2017-10-27 14:19  叶建成  阅读(134)  评论(0编辑  收藏  举报