题目:我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
还是斐波那契数列的问题,思路:
借用牛客一位老哥的解释:
若第一步选择竖方向填充时,则大矩形规模减小为n-1填充。
若第一步选择横方向填充,则第二排也只能横方向填充,那么大矩形规模就缩减为n-2填充。
即第n步填充,取决于第n-1和n-2步的填充。与青蛙跳台阶同样都是斐波那契数列的问题。
代码如下:
class Solution:
def rectCover(self, number):
if number==0:
return 0
elif number==1:
return 1
elif number==2:
return 2
else:
pre2,pre1=1,2
for i in range(3,number+1):
cur=pre2+pre1
pre2=pre1
pre1=cur
return pre1
和青蛙跳台阶的代码是相同的。