题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路:
乍一看,这道题貌似无从下手,但其实将图画出来之后你就会豁然开朗,下图是本题的解题思路图片,摘自-Billy的博客,原文链接见reference,所以看到这个图之后就发现,这其实又是斐波那契数列的一种变形,n=1时,只有一种解法,n=2时,有两种解法,n>2时,矩形可以被拆分为一块矩形和剩下部分+两块矩形和剩下部分,所以解题方法和斐波那契数列、青蛙跳台阶是一样的。
Solution:
Python
# -*- coding:utf-8 -*-
class Solution:
def rectCover(self, number):
# write code here
if number < 3:
return number
a,b = 1,2
for i in range(3,number+1):
tmp = a+b
a = b
b = tmp
return b
Reference:
-Billy : https://blog.csdn.net/tc_1337/article/details/80957987