leetcode 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 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]
.
Difficulty: medium
790. Domino and Tromino Tiling
中文描述
你拥有两种形状的多米诺骨牌,一种是XX这样 2x1 形状的,还有一种是L型的。问铺满 2xN 的空间,一共能有多少种不同的方法。结果对10^9 + 7取余数。
输入格式
输入一个值N
,表示长度。
Examples:
- Input: 3
Output: 5
解释:
总共有5中方法组成 2X3 的矩形
XYZ XXZ XYY XXY XYY
XYZ YYZ XZZ XYY XXY
解答思路
解法一:dp解法
1.可以从图里看出, n=1和n=2 n = 1 和 n = 2 的时候为基础情况,在 n=3 n = 3 开始就能发现一定规律。 n=3 n = 3 的第一行,是由 n=2 n = 2 的情况加上一个2X1的多米诺牌放在末尾组成的。 n=3 n = 3 的第二行的前半部分是由 n=1 n = 1 的情况加上两个2X1的多米诺牌横放,放在末尾组成的。 n=3 n = 3 的第二行的后半部分则是不由 n=1,2 n = 1 , 2 的情况组成的。同理 n=4 n = 4 的第一行,是由 n=3 n = 3 的情况加上一个2X1的多米诺牌放在末尾组成的。 n=4 n = 4 的第二行是由 n=2 n = 2 的情况加上两个2X1的多米诺牌横放,放在末尾组成的。 n=4 n = 4 的第三行的前半部分则是由 n=1 n = 1 加上两个L型的多米诺牌放在末尾组成的。 n=4 n = 4 的第三行的后半部分则是不由 n=1,2,3 n = 1 , 2 , 3 的情况组成的。
2.从上我们的大概可以总结规律,每个 n n 都是由之前 的情况配合组成的。 dpn d p n 表示第 2×n 2 × n 个的组合个数。
其公式为 dpn=dpn−1+dpn−2+2×∑i=0n−3dpi,其中dp0=1 d p n = d p n − 1 + d p n − 2 + 2 × ∑ i = 0 n − 3 d p i , 其 中 d p 0 = 1 。 dpn−1 d p n − 1 表示以一个2X1的多米诺牌放在末尾组成的, dpn−2 d p n − 2 表示以两个2X1的多米诺牌横放,放在末尾组成的,剩下的则是由带有L型为末尾的。结尾形状具体可以看下图:
在 n−3 n − 3 以后都是有2种,所以需要乘2.3.上述式子可以简化,用 dpn−dpn−1=dpn−1+dpn−2+2×∑i=0n−3dpi−(dpn−2+dpn−3+2×∑i=0n−4dpi) d p n − d p n − 1 = d p n − 1 + d p n − 2 + 2 × ∑ i = 0 n − 3 d p i − ( d p n − 2 + d p n − 3 + 2 × ∑ i = 0 n − 4 d p i ) ,化简得到 dpn=2dpn−1−dpn−3 d p n = 2 d p n − 1 − d p n − 3