矩形覆盖
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
比如n=3时,2*3的矩形块有3种覆盖方法:
当n=1, 1种方法
当n=2, 2种方法
当n=3, 3种方法
当n=4, 5种方法
当n=5, 8种方法
提出斐波那契猜想
猜想:
n块矩形有f(n)种覆盖方法。进行逆向分析,要完成最后的搭建有两种可能。
证明:
第一种情况等价于情形1中阴影部分的n-1块矩形有多少种覆盖方法,为f(n-1);
第二种情况等价于情形2中阴影部分的n-2块矩形有多少种覆盖方法,为f(n-2);
故f(n) = f(n-1) + f(n-2),还是一个斐波那契数列
代码:
class Solution:
def rectCover(self, number):
# write code herek
a,b=0,1
if number <=0:
return 0
else:
for i in range(number):
a,b=b,a+b
return b