Título Descripción
Podemos usar dos pequeño rectángulo 1 de los lados o verticalmente para cubrir un rectángulo más grande. ¿El uso de n2 pequeña cobertura rectángulo 1 sin solapamiento un gran rectángulo 2 * n, un total de cuántas maneras?
Título idea
fórmulas de recursión: f (n) = f ( n-1) + f (n-2) (n> 2) f (0) = 0, f (1) = 1, f (2) = 2
código Python
- Recursivo, correr demasiado largo
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)
- cálculo Loop usando propagación hacia adelante
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
- El uso de tampones de matriz, calculado reducir la duplicación, el aumento de memoria, se mejora la velocidad de ejecución
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]