题目描述:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路:最主要的还是找规律,类似斐波那契序列问题
斐波那契序列问题的解决方法有两种,一种递归循环,另一种一种非递归循环。
# -*- coding:utf-8 -*-
'''最主要的还是找规律,类似斐波那契序列问题'''
class Solution:
def rectCover(self, number):
##非递归版本
if number == 0:
return 0
# write code here
f1 = 1
f2 = 2
if number == 1:
return f1
if number == 2:
return f2
for i in range(1,number-1):
res = f1+f2
f1 = f2
f2 = res
return res
##递归版本
if number == 0:
return 0
f1 = 1
f2 = 2
if number == 1:
return f1
elif number == 2:
return f2
else:
return self.rectCover(number-1)+self.rectCover(number-2)
if __name__ == '__main__':
s = Solution()
print(s.rectCover(3))