问题:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
解题思路:这其实就是一个斐波切纳数列,当number大于2的时候,我们最后一块的方法只有两种竖着放,这种方法就与rectCover(n-1)相同,横着放,
这种方法就与rectCover(n-2)相同
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
' a test module '
__author__ = 'Zhang Shuai'
import functools
def cache(func):
result = {}
@functools.wraps(func)
def wrapper(self, n):
if result.get(n, 0):
return result.get(n)
else:
result[n] = func(self, n)
return result[n]
return wrapper
class Solution:
@cache
def rectCover(self, number):
if number <= 0:
return
elif number <=2:
return number
else:
return self.rectCover(number - 1) + self.rectCover(number - 2)