790. Domino and Tromino Tiling ⭐

Medium

You have two types of tiles: a 2 x 1 domino shape and a tromino shape. You may rotate these shapes.

Given an integer n, return the number of ways to tile an 2 x n board. Since the answer may be very large, return it modulo 109 + 7.

In a tiling, every square must be covered by a tile. Two tilings are different if and only if there are two 4-directionally adjacent cells on the board such that exactly one of the tilings has both squares occupied by a tile.

Example 1:

Input: n = 3
Output: 5
Explanation: The five different ways are show above.

Example 2:

Input: n = 1
Output: 1

Constraints:

  • 1 <= n <= 1000

解題

參考花花的影片

func numTilings(n int) int {
     dp := make([][]int, n + 1)
     for i:=0; i<=n; i++ {
         dp[i] = make([]int, 2)
     }
    // dp[i][1] 是凸出來一個角 dp[i][0] 是完整的長方形
     dp[0][0], dp[1][0] = 1, 1
    for i:=2; i<=n; i++ {
        dp[i][0] = (dp[i - 1][0] + dp[i - 2][0] + 2 * dp[i - 1][1]) % 1000000007
        dp[i][1] = (dp[i - 2][0] + dp[i - 1][1]) % 1000000007
    }

    return dp[n][0]
}

Last updated