阅读目录
题目描述
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路及Python实现
- 遇事不决先画图,看下图,就知道其中的玄机了!
- 第一步矩形覆盖时可以有两种覆盖的方法,即横着放和竖着放,当竖着放的时候,接下来就相当于覆盖2*(n-1)的大矩形;当横着放的时候,就相当于覆盖2*(n-2)的大矩形。
- 可以得出 f(n)=f(n-1)+f(n-2) ;n=1时,f(1)=1,n=2时,f(2)=2
class Solution:
def rectCover(self, number):
if number == 0:
return 0
if number == 1:
return 1
if number == 2:
return 2
a = 1
b = 2
ret = 0
for i in range(3, number + 1):
ret = a + b
a = b
b = ret
return ret
class Solution:
def rectCover(self, number):
if number == 0:
return 0
if number == 1:
return 1
if number == 2:
return 2
a = 1
b = 2
for i in range(3, number + 1):
b = a + b
a = b - a # 这里是 ret=a+b; b=ret
return b