Title Description
We can use two small rectangle 1 of sideways or vertically to cover a larger rectangle. Will the use of n 2 small rectangle 1 coverage without overlap a large rectangle 2 * n, a total of how many ways?
Title idea
recursion formulas: f (n) = f ( n-1) + f (n-2) (n> 2) f (0) = 0, f (1) = 1, f (2) = 2
Python code
- Recursive, running too long
class Solution:
def rectCover(self, number):
assert number >= 0, "error input!"
if number <= 2:
return number
else:
return self.rectCover(number - 1) + self.rectCover(number - 2)
- Loop calculation using forward propagation
class Solution:
def rectCover(self, number):
assert number >= 0, "error input!"
if number <= 2:
return number
else:
a = 1
b = 2
result = 0
for i in range(3, number + 1):
result = a + b
a = b
b = result
return result
- Using array buffers, calculated reduce duplication, increased memory, execution speed is improved
class Solution:
def __init__(self):
self.result = []
self.result.append(0)
self.result.append(1)
self.result.append(2)
def rectCover(self, number):
assert number >= 0, "error input!"
if number >= len(self.result):
for i in range(len(self.result), number + 1):
self.result.append(self.result[i - 1] + self.result[i - 2])
return self.result[number]