一、题目描述
题目来源:
剑指offer
具体描述:
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
示例:
三、问题剖析
n 个 21的小矩形无重叠地覆盖一个2n的大矩形,共有 F(n) 种方法
- 当 n = 1 时,显然 F(n) = F(1) = 1
- 当 n = 2 时,显然 F(n) = F(2) = 2
- 当 n >=3 时,大矩形的最前端要么是以竖着的21的小矩形组成,要么是以2块横着的21 的小矩形组成(如下图),那么有多少种组法就由后面部分组成,所以 F(n) = F(n-1) + F(n-2)
综上所述:
四、Code及提交结果
语言: Python 2.7
# -*- coding:utf-8 -*-
class Solution:
def rectCover(self, number):
# write code here
ans = [0, 1, 2]
if number == 1 or number ==2:
return ans[number]
for i in range(3, number+1):
ans.append(ans[i-1] + ans[i-2])
return ans[number]
提交结果: