790. Domino and Tromino Tiling¶ Time: $O(n)$ Space: $O(n)$ C++JavaPython 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15class Solution { public: int numTilings(int n) { constexpr int kMod = 1'000'000'007; vector<long> dp(1001); dp[1] = 1; dp[2] = 2; dp[3] = 5; for (int i = 4; i <= n; ++i) dp[i] = (2 * dp[i - 1] + dp[i - 3]) % kMod; return dp[n]; } }; 1 2 3 4 5 6 7 8 9 10 11 12 13 14class Solution { public int numTilings(int n) { final int kMod = 1_000_000_007; long[] dp = new long[1001]; dp[1] = 1; dp[2] = 2; dp[3] = 5; for (int i = 4; i <= n; ++i) dp[i] = (2 * dp[i - 1] + dp[i - 3]) % kMod; return (int) dp[n]; } } 1 2 3 4 5 6 7 8 9class Solution: def numTilings(self, n: int) -> int: kMod = 1_000_000_007 dp = [0, 1, 2, 5] + [0] * 997 for i in range(4, n + 1): dp[i] = 2 * dp[i - 1] + dp[i - 3] return dp[n] % kMod