Skip to content

Num Tillings

class Solution:
    def numTilings(self, n: int) -> int:
        dp = [0] * (n + 1)
        # to reduce small val errors
        if n >= 0:
            dp[0] = 1
        if n >= 1:
            dp[1] = 1
        if n >= 2:
            dp[2] = 2
        if n >= 3:
            dp[3] = 5
        mod = 1000000007

        if n <= 3:
            return dp[n]
        for i in range(4, n + 1):
            dp[i] = (2 * dp[i - 1] + dp[i - 3]) % mod
        return dp[n]