Leetcode-790. Domino and Tromino Tiling 多米诺和托米诺平铺 (DP)

从零开始:用YOLOv8-Pose实现实时人体姿态检测(附完整代码) 本文提供了一份从零开始的完整实战指南,详细介绍了如何使用YOLOv8-Pose构建实时人体姿态检测系统。内容涵盖环境搭建、数据准备、模型训练与调优,以及高性能部署进阶应用开发,并附有可直接运行的代码示例,帮助开发者快速掌握Pose Estimation技术并将其应用于实际项目。 阅读详情

题目

有两种形状的瓷砖:一种是 2x1 的多米诺形,另一种是形如 “L” 的托米诺形。两种形状都可以旋转。
XX <- 多米诺
XX <- “L” 托米诺
X
给定 N 的值,有多少种方法可以平铺 2 x N 的面板?返回值 mod 10^9 + 7。
(平铺指的是每个正方形都必须有瓷砖覆盖。两个平铺不同,当且仅当面板上有四个方向上的相邻单元中的两个,使得恰好有一个平铺有一个瓷砖占据两个正方形。)
链接:https://leetcode.com/problems/domino-and-tromino-tiling/

We have two types of tiles: a 2x1 domino shape, and an “L” tromino shape. These shapes may be rotated.

XX <- domino

XX <- “L” tromino
X

Given N, how many ways are there to tile a 2 x N board? Return your answer modulo 10^9 + 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.)

Note:

  • N will be in range [1, 1000].

Example:

Example:
Input: 3
Output: 5
Explanation:
The five different ways are listed below, different letters indicates different tiles:
XYZ XXZ XYY XXY XYY
XYZ YYZ XZZ XYY XXY

思路及代码

DP 1. 规律

# 36ms 58.13%
class Solution:
    def numTilings(self, N: int) -> int:
        if not N:
            return 1
        kmod = 10**9 + 7
        mino = [[0,0,0] for i in range(N+1)]
        mino[0][0] = 1
        mino[1][0] = 1
        for i in range(2, N+1):
            mino[i][0] = (mino[i-1][0] + mino[i-2][0] + mino[i-1][1] + mino[i-1][2]) % kmod
            mino[i][1] = (mino[i-1][2] + mino[i-2][0]) % kmod
            mino[i][2] = (mino[i-1][1] + mino[i-2][0]) % kmod
        return mino[N][0]

DP 2. 公式
  • dp[n] = dp[n-1] + dp[n-2] + 2*(dp[n-3] + … + dp[0])
    = dp[n-1] + dp[n-3] + [dp[n-2] + dp[n-3] + 2*(dp[n-4] + … + dp[0])]
    = dp[n-1] + dp[n-3] + dp[n-1]
    = 2*dp[n-1] + dp[n-3]
  • dp[n-1]:在此基础上加一个|
  • dp[n-2]:在此基础上加=
  • dp[n-3]……dp[0]:在此基础上插入两个L型在最边缘,对于每一个共两种
  • 故dp[n] = 2*dp[n-1]+dp[n-3]
# 20ms 99.59%
class Solution:
    def numTilings(self, N: int) -> int:
        mino = [1,1,2]
        if not N:
            return 0
        if N < 3:
            return mino[N]
        kmod = 10**9 + 7
        for i in range(3, N+1):
            mino.append((2*mino[-1] + mino[-3]) % kmod)
        return mino[-1]

复杂度

T = O(n)O(n)O(n)
S = O(n)O(n)O(n) -> O(1)O(1)O(1)

矿石生成(1) 这个提供了标准化的矿石放置配置模板简化了常见稀有矿石的配置过程遵循了Minecraft原版的世界生成模式提高了代码的可读性可维护性通过使用这个类,模组开发者可以更轻松地配置矿石的生成规则,而不需要每次都手动编写完整的放置修饰符列表。这种设计模式在原版Minecraft其他大型模组中也很常见,是一种良好的编程实践。// 导入语句...// 字段方法...包声明表明这个类位于luckymod模组的WorldGen包中,专门处理世界生成相关配置。导入语句。 阅读详情

相关推荐

DC/DC开关电源学习笔记(一)开关电源技术概述

开关模式电源(Switch Mode Power Supply,简称SMPS),又称交换式电源、开关变换器,是一种高频化电能转换装置,是电源供应器的一种。其功能是将一个位准的电压,透过不同形式的架构转换为用户端所需求的电压或电流。开关电源的输入多半是交流电源(例如市电)或是直流电源,而输出多半是需要直流电源的设备,例如个人电脑,而开关电源就进行两者之间电压及电流的转换。【百度百科】

小幽余生不加糖 1582

LeetCode 多米诺托米诺平铺(递推式)

有两种形状的瓷砖:一种是 2x1 的多米诺形,另一种是形如 “L” 的托米诺形。两种形状都可以旋转。 XX <- 多米诺 XX <- “L” 托米诺 X 给定 N 的值,有多少种方法可以平铺 2 x N 的面板?返回值 mod 10^9 + 7。 (平铺指的是每个正方形都必须有瓷砖覆盖。两个平铺不同,当且仅当面板上有四个方向上的相邻单元中的两个,使得恰好有一个平铺有一个瓷砖占据两个...

hestyle的博客 1229

PCL——KITTI数据集.bin文件转.pcd并可视化【2025最新版】

kitti数据集中的bin格式点云主要存储的字段为:`x`、`y`、`z`、`intensity`,对应于PCL中的PointXYZI。因此,只需将bin中的属性信息读取出来放入`PointXYZI`即可。本文给出简单易用的实现代码。博客长期更新,本文最近更新时间为:2025年1月11日。

点云侠的博客 3932

[Swift]LeetCode790. 多米诺托米诺平铺 | Domino and Tromino Tiling

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/stren...

weixin_30832143的博客 277

动态规划-填格子问题 Domino and Tromino Tiling

2018-09-01 22:38:19 问题描述: 问题求解: 本题如果是第一看到,应该还是非常棘手的,基本没有什么思路。 不妨先从一种简化的版本来考虑。如果仅有一种砖块,那么,填充的方式如下。 从上面可以看出,本质上是一条动态规划问题,递推式就是Fib序列。 那么针对本问题,需要考虑的情况就复杂了一些。 public int numTilings(...

aitie1479的博客 453

多米诺多米诺平铺_多米诺的比萨饼糟透了,那为什么其他人都无法超越他们的技术?...

多米诺多米诺平铺For years, I’vedreamed of having an Emergency Pizza Button that will automatically order a pizza for me with a single tap. I’m not the only one with this dream. There have been countless inn...

culunyi0802的博客 1181

LeetCode790. Domino and Tromino Tiling 解题报告(Python

作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/domino-and-tromino-tiling/description/ 题目描述: We have two types of tiles: a 2x1 domino shape, and an “L...

负雪明烛 2435

leetcode 790. Domino and Tromino Tiling | 790. 多米诺托米诺平铺(暴力递归-DP

题目 https://leetcode.com/problems/domino-and-tromino-tiling/ 题解 比较像剑指 offer 里的一道矩形填充题,一看就是个 dp,见草稿: 经典的暴力递归 -> DP class Solution { int N; int MOD = 1000_000_007; int[] dp1; int[] dp2; public int numTilings(int n) { N = n;

寒泉 3万+

LeetCode //C - 790. Domino and Tromino Tiling

Summary: This problem counts the ways to tile a 2×n board using domino and tromino shapes, allowing rotations. The solution employs dynamic programming with base cases for n=0 (1 way), n=1 (1 way), and n=2 (2 ways). The recurrence relation dp[i] = dp[i-1]

Made in Code 2517

[leetcode] 790. Domino and Tromino Tiling

Description We have two types of tiles: a 2x1 domino shape, and an “L” tromino shape. These shapes may be rotated. XX &lt;- domino XX &lt;- "L" tromino X Given N, how many ways are there to tile a...

Learning from the mistakes 880

790. 多米诺托米诺平铺(难度:中等)

题目链接:https://leetcode.cn/problems/domino-and-tromino-tiling/

baidu_41907361的博客 274

790. Domino and Tromino Tiling

We have two types of tiles: a 2x1 domino shape, and an "L" tromino shape. These shapes may be rotated. XX <- domino XX <- "L" tromino X Given N, how many ways are there to tile a 2 x N bo...

qq_31987451的博客 295

*790. Domino and Tromino Tiling

https://leetcode.com/problems/domino-and-tromino-tiling/description/动手画画图,dp的方程应该不难想。(注意总结case数目这种,一定考虑怎么把Case归类,防止多次计数)。直接按dp方程写就是:class Solution { public: int numTilings(int N) { long lo...

Pilgrim 401

790. 多米诺托米诺平铺

https://leetcode-cn.com/problems/domino-and-tromino-tiling/ 有两种形状的瓷砖:一种是 2x1 的多米诺形,另一种是形如 “L” 的托米诺形。两种形状都可以旋转。 XX <- 多米诺 XX <- “L” 托米诺 X 给定 N 的值,有多少种方法可以平铺 2 x N 的面板?返回值 mod 10^9 + 7。 (平铺指的是每个...

晞行的博客 622

Python内置函数 Leetcode刷题总结(持续更新)

str.isalpha(): 判断字符串是否只由字母组成 ^异或 1<<5,相当于把第5位从0变到1,从1变到0, 即实现大小写的转换 0 ^ 0=0 , 0 ^ 1= 1 , 1 ^ 0= 1 , 1 ^ 1= 0 ord()返回对应的ASCII码 chr()返回对应的ASCII字符 itertools.product(a,b): 笛卡尔积 ...

JamieLuo的博客 1352

Leetcode-162. Find Peak Element 寻找峰值 (二分查找) -python

题目 峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。 数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞。 链接:https://leetcode.com/problems/find-peak-element/ A peak element is an element that is greater than its neighbors

JamieLuo的博客 565

Leetcode-399. 除法求值 Evaluate Division (并查集Union-Find) -超详细python

题目 给出方程式 A / B = k, 其中 A B 均为用字符串表示的变量, k 是一个浮点型数字。根据已知方程式求解问题,并返回计算结果。如果结果不存在,则返回 -1.0。 链接:https://leetcode.com/problems/evaluate-division/ Equations are given in the format A / B = k, where A and B are variables represented as strings, and k is a rea

JamieLuo的博客 478

Leetcode-1202. 交换字符串中的元素 Smallest String With Swaps (并查集/DFS) -超详细python

题目 给你一个字符串 s,以及该字符串中的一些「索引对」数组 pairs,其中 pairs[i] = [a, b] 表示字符串中的两个索引(编号从 0 开始)。 你可以 任意多次交换 在 pairs 中任意一对索引处的字符。 返回在经过若干次交换后,s 可以变成的按字典序最小的字符串。 链接:https://leetcode.com/problems/smallest-string-with-swaps/ You are given a string s, and an array of pairs o

JamieLuo的博客 456

Leetcode-207. 课程表 Course Schedule (拓扑排序) -超详细python

题目 你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。 在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1] 给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习? 链接:https://leetcode.com/problems/course-schedule/ There are a total of numCourses courses you have to take,

JamieLuo的博客 455

Leetcode-1048. Longest String Chain 最长字符串链 (DP-python

题目 给出一个单词列表,其中每个单词都由小写英文字母组成。 如果我们可以在 word1 的任何地方添加一个字母使其变成 word2,那么我们认为 word1 是 word2 的前身。例如,“abc” 是 “abac” 的前身。 词链是单词 [word_1, word_2, …, word_k] 组成的序列,k >= 1,其中 word_1 是 word_2 的前身,word_2 是 word_3 的前身,依此类推。 从给定单词列表 words 中选择单词组成词链,返回词链的最长可能长度。 链接:ht

JamieLuo的博客 451

Leetcode-1040. 移动石子直到连续 II Moving Stones Until Consecutive II (滑动窗口) -超详细python

题目 在一个长度无限的数轴上,第 i 颗石子的位置为 stones[i]。如果一颗石子的位置最小/最大,那么该石子被称作端点石子。 每个回合,你可以将一颗端点石子拿起并移动到一个未占用的位置,使得该石子不再是一颗端点石子。 值得注意的是,如果石子像 stones = [1,2,5] 这样,你将无法移动位于位置 5 的端点石子,因为无论将它移动到任何位置(例如 0 或 3),该石子都仍然会是端点石子。 当你无法进行任何移动时,即,这些石子的位置连续时,游戏结束。 要使游戏结束,你可以执行的最小最大移动次数

JamieLuo的博客 450

柑橘叶片病害植物病虫害数据集voc yolov8数据格式可以直接训练.zip

柑橘叶片病害植物病虫害数据集voc yolov8数据格式可以直接训练.zip

SCARA:超低成本3D可打印SCARA臂

规模====超低成本3D可打印SCARA臂

上一篇: Leetcode-740. Delete and Earn 删除与获得点数 (DP)
下一篇: Leetcode-801. Minimum Swaps To Make Sequences Increasing 使序列递增的最小交换次数 (DP)
简米
博客等级 码龄7年 31粉丝 88原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值