列表

详情


790. 多米诺和托米诺平铺

有两种形状的瓷砖:一种是 2 x 1 的多米诺形,另一种是形如 "L" 的托米诺形。两种形状都可以旋转。

给定整数 n ,返回可以平铺 2 x n 的面板的方法的数量。返回对 109 + 7 取模 的值。

平铺指的是每个正方形都必须有瓷砖覆盖。两个平铺不同,当且仅当面板上有四个方向上的相邻单元中的两个,使得恰好有一个平铺有一个瓷砖占据两个正方形。

 

示例 1:

输入: n = 3
输出: 5
解释: 五种不同的方法如上所示。

示例 2:

输入: n = 1
输出: 1

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int numTilings(int n) { } };

python3 解法, 执行用时: 32 ms, 内存消耗: 14.8 MB, 提交时间: 2022-11-12 11:07:21

MOD = 10 ** 9 + 7

class Solution:
    def numTilings(self, n: int) -> int:
        if n == 1: return 1
        a, b, c = 1, 1, 2
        for _ in range(3, n + 1):
            a, b, c = b, c, (c * 2 + a) % MOD
        return c

python3 解法, 执行用时: 36 ms, 内存消耗: 14.9 MB, 提交时间: 2022-11-12 11:05:13

MOD = 10 ** 9 + 7

class Solution:
    def numTilings(self, n: int) -> int:
        if n == 1: return 1
        f = [0] * (n + 1)
        f[0] = f[1] = 1
        f[2] = 2
        for i in range(3, n + 1):
            f[i] = (f[i - 1] * 2 + f[i - 3]) % MOD
        return f[n]

java 解法, 执行用时: 3 ms, 内存消耗: 38.4 MB, 提交时间: 2022-11-12 10:54:43

class Solution {
    public int numTilings(int n) {
        int mod = 1000000007;
        List<Integer> dp = new ArrayList<>();
        dp.add(0);
        dp.add(1);
        dp.add(2);
        dp.add(5);
        int sum = 1 + 2 + 5;
        for (int i = 4; i <= n; i++) {
            int temp = ((2 * sum) - dp.get(i - 2) - dp.get(i - 1) + 2) % mod;
            if (temp < 0) temp += mod;
            dp.add(temp);
            sum = (sum % mod + dp.get(dp.size() - 1) % mod) % mod;
        }
        return dp.get(n) % mod;
    }
}

python3 解法, 执行用时: 52 ms, 内存消耗: 15.1 MB, 提交时间: 2022-11-12 10:50:03

class Solution:
    def numTilings(self, n: int) -> int:
        MOD = 10 ** 9 + 7
        dp = [[0] * 4 for _ in range(n + 1)]
        dp[0][3] = 1
        for i in range(1, n + 1):
            dp[i][0] = dp[i - 1][3]
            dp[i][1] = (dp[i - 1][0] + dp[i - 1][2]) % MOD
            dp[i][2] = (dp[i - 1][0] + dp[i - 1][1]) % MOD
            dp[i][3] = (((dp[i - 1][0] + dp[i - 1][1]) % MOD + dp[i - 1][2]) % MOD + dp[i - 1][3]) % MOD
        return dp[n][3]

上一题