leetcode 790. Domino and Tromino Tiling

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:

  1. Input: 3
    Output: 5
    解释:
    总共有5中方法组成 2X3 的矩形
    XYZ XXZ XYY XXY XYY
    XYZ YYZ XZZ XYY XXY

解答思路

  • 解法一:dp解法
    n从1到4的情况

    1.可以从图里看出, n=1n=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=12 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=123 n = 1 , 2 , 3 的情况组成的。

    2.从上我们的大概可以总结规律,每个 n n 都是由之前 n 1 的情况配合组成的。 dpn d p n 表示第 2×n 2 × n 个的组合个数。
    其公式为 dpn=dpn1+dpn2+2×i=0n3dpi,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 dpn1 d p n − 1 表示以一个2X1的多米诺牌放在末尾组成的, dpn2 d p n − 2 表示以两个2X1的多米诺牌横放,放在末尾组成的,剩下的则是由带有L型为末尾的。结尾形状具体可以看下图:
    结尾情况
    n3 n − 3 以后都是有2种,所以需要乘2.

    3.上述式子可以简化,用 dpndpn1=dpn1+dpn2+2×i=0n3dpi(dpn2+dpn3+2×i=0n4dpi) 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=2dpn1dpn3 d p n = 2 d p n − 1 − d p n − 3

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值