题目描述:
我们可以用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 - ,
f(n) = f(n-1) + f(n-2), (n > 2)。
Python实现:
// An highlighted block
# -*- coding:utf-8 -*-
class Solution:
def rectCover(self, number):
# write code here
if number < 1:
return 0
p =q = r = 0
for i in range(1,number+1):
if i ==1:
p =q = r = 1
elif i == 2:
q = r =2
else:
r = q+p
p =q
q= r
return r
解法2
// An highlighted block
# -*- coding:utf-8 -*-
class Solution:
def rectCover(self, number):
# write code here
if number == 0:
return 0
if number == 1:
return 1
a,b = 1,1
while number>1:
a,b = b,a+b
number-=1
return b