题目描述
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
比如n=3时,2*3的矩形块有3种覆盖方法:
我翻车了。。我以为是dfs,结果一直TLE
# 翻车代码
class Solution:
def __init__(self):
self.num = 0
self.book = [[0 for i in range(1005)] for j in range(4)]
def dfs(self, x, y, number):
if x >= 2 and y > number:
self.num += 1
return
if y > number:
x += 1
y = 1
if self.book[x][y] == 1:
self.dfs(x, y + 1, number)
if self.book[x][y] == 0 and self.book[x][y + 1] == 0 and y + 1 <= number:
self.book[x][y] = 1
self.book[x][y + 1] = 1
self.dfs(x, y + 2, number)
self.book[x][y] = 0
self.book[x][y + 1] = 0
if self.book[x][y] == 0 and self.book[x + 1][y] == 0 and x + 1 <= 2:
self.book[x][y] = 1
self.book[x + 1][y] = 1
self.dfs(x, y + 1, number)
self.book[x][y] = 0
self.book[x + 1][y] = 0
return
def rectCover(self, number):
# write code here
self.dfs(1, 1, number)
return self.num
# 通过代码
# -*- coding:utf-8 -*-
class Solution:
def Fibonacci(self, n):
# write code here
a, b, num = 1, 2, 3
if n <= 2:
return n
while num <= n:
a, b = b, a + b
num += 1
return b
def rectCover(self, number):
# write code here
# 1 2 3 5 8 ...
self.Fibonacci(number)
return self.Fibonacci(number)