Rectangular footprint prove safety Offer-10

Topic connection

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]

Guess you like

Origin www.cnblogs.com/nrocky/p/12624118.html