LeetCode每日一题——790. 多米诺和托米诺平铺

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

题目

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

2345_image_file_copy_7.jpg

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

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

示例

示例 1:

2345_image_file_copy_8.jpg

输入: n = 3

输出: 5

解释: 五种不同的方法如上所示。

示例 2:

输入: n = 1

输出: 1

提示:

1 <= n <= 1000

思路

动态规划:

dp数组定义为dp[i][0]表示到达i-1块全部填满的可能情况,dp[i][0]表示到达i-1块缺一块的可能情况(这里缺的一块不分上下)。

状态转移方程为:

1.dp[i][0]=dp[i-1][0]+dp[i-2][0]+dp[i-1][1]

2.dp[i][1]=dp[i-2][0]*2+dp[i-1][1]

题解

class Solution:
    def numTilings(self, n: int) -> int:
    # n=1,2的情况直接返回
        if n==1:return 1
        if n==2:return 2
        dp=[[0]*2 for _ in range(n)]
        # 赋边界值
        dp[0]=[1,0]
        dp[1]=[2,2]
        for i in range(2,n):
            dp[i][0]=dp[i-1][0]+dp[i-2][0]+dp[i-1][1]
            dp[i][1]=dp[i-2][0]*2+dp[i-1][1]
        return dp[-1][0]%(10**9+7)
目录
相关文章
|
6月前
|
JSON 数据格式
星系炸弹(蓝桥杯)
星系炸弹(蓝桥杯)
|
Cloud Native
【刷题日记】473. 火柴拼正方形
本次刷题日记的第 52 篇,力扣题为:473. 火柴拼正方形,中等
【每日一道智力题】之蚂蚁走树脂和绳子秒表
【每日一道智力题】之蚂蚁走树脂和绳子秒表
166 0
【寒假每日一题】AcWing 4652. 纸张尺寸
目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
82 0
蓝桥杯2017年第八届第二题:纸牌三角形
蓝桥杯是指蓝桥杯全国软件和信息技术专业人才大赛。是由工业和信息化部人才交流中心举办的全国性IT学科赛事。共有北京大学、清华大学、上海交通大学等全国1200余所高校参赛。
91 0
蓝桥杯2017年第八届第二题:纸牌三角形
|
C++
【力扣·每日一题】807. 保持城市天际线(C++ 贪心)
【力扣·每日一题】807. 保持城市天际线(C++ 贪心)
98 0
【力扣·每日一题】807. 保持城市天际线(C++ 贪心)
LeetCode每日一题——417. 太平洋大西洋水流问题
有一个 m × n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。
107 0
LeetCode每日一题——417. 太平洋大西洋水流问题
|
存储 人工智能 算法
蓝桥杯十大常见天阶功法——炎之呼吸.叁之型.动态规划--(上篇)
蓝桥杯十大常见天阶功法——炎之呼吸.叁之型.动态规划--(上篇)
217 0
蓝桥杯十大常见天阶功法——炎之呼吸.叁之型.动态规划--(上篇)
|
存储 机器学习/深度学习 算法
蓝桥杯十大常见天阶功法——虫之呼吸.贰之型.二分
蓝桥杯十大常见天阶功法——虫之呼吸.贰之型.二分
273 0
蓝桥杯十大常见天阶功法——虫之呼吸.贰之型.二分
LeetCode每日一题——735. 行星碰撞
给定一个整数数组 asteroids,表示在同一行的行星。
126 0
下一篇
无影云桌面