我们可以用2 1的小矩形横着或者竖着去覆盖更大的矩形。 请问用n个2 1的小矩形无重叠地覆盖一个2*n的大矩形, 总共有多少种方法?
n=1 - 只有横放一个矩形一种解决办法
n=2 - 有横放一个矩形,竖放两个矩形两种解决办法
n=3 - n=2的基础上加1个横向,n=1的基础上加2个竖向
n=4 - n=3的基础上加1个横向,n=2的基础上加2个竖向
· · · n=n - n = f(n-1) + f(n-2)
斐波那契数列变种。。。。。
class Solution { public: int rectCover(int number) { if (number == 0) return 0; else if(number == 1){ return 1; } else if (number == 2){ return 2; } return rectCover(number - 1) + rectCover(number - 2); } };
发现碰到这种问题,可以通过从n=0或1开始慢慢先算几个(跟初高中找规律填数一样),来找出相连两个数或相连的几个数之间的关系。
转载请注明出处:
http://www.zgljl2012.com/2017/01/07/jian-zhi-offer-ju-xing-fu-gai/