题目大意

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

XX  <- 多米诺XX  <- "L" 托米诺
X

给定 N 的值,有多少种方法可以平铺 2 x N 的面板?返回值 mod 10^9 + 7。

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

示例:
输入: 3
输出: 5
解释:
下面列出了五种不同的方法,不同字母代表不同瓷砖:
XYZ XXZ XYY XXY XYY
XYZ YYZ XZZ XYY XXY

解题思路

寻找递推公式。
对于任意n来说,要想全部平铺:

  • f(n-1)全部平铺的情况下,加上一个2*1的块即可,1种方式;
  • f(n-2)全部平铺的情况下,加上两个横着的12块即可,一种方式(注意,这里不能加入两个竖着的21块,因为当n-2完成后,如果加上一个竖着的块,那么n-1也全部平铺完成了,和f(n-1)就重复计算了,因此n-2时仅有一种方式);
  • f(n-3)全部平铺的情况下,只能通过放置两个’L’块平铺,两个L块可以上下颠倒,因此有2种方式从f(n-3)平铺成f(n)。注意:如果放置一个21块,则相当于重复计算了f(n-2),如果放置两个12块,则相当于重复计算了f(n-1)。
  • 综上所述,我们在通过f(x)平铺f(n)时,x+1~n-1列不能有完成拼好的,否则就重复计算了

因此:从f(x)平铺f(n)时,我们先放置一个L型块,然后x+1~n-1列全部用12的块填充,这样就会使得每一列都是错位的。填充完毕后,n-1列中有1个格子被填充了,另一个格子空着,同时第n列空着。此时再用另一个L块填充即可。 (对这种方法上下翻转可以形成另一种方案,因此需要2)

递推公式为:f(n)=f(n-1)+f(n-2)+2*(f(n-3)+…+f(0))。 另一方面f(n-1)=f(n-2)+f(n-3)+2*(f(n-4)+…+f(0))。将第二个公式带入第一个公式中,化简得到:f(n)=2*f(n-1)+f(n-3)

注意:代码中可以仅通过几个变量来完成计算

class Solution {public:int numTilings(int N) {if (N <= 1)return 1;if (N == 2)return 2;vector<int> dp(N + 1, 0);dp[0] = 1;dp[1] = 1;dp[2] = 2;for (int i = 3; i <=N; ++i){dp[i] = (2 * dp[i - 1] % 1000000007 + dp[i - 3] % 1000000007) % 1000000007;}return dp.back();}
};

leetcode790.多米诺和托米诺平铺相关推荐

  1. Java实现 LeetCode 790 多米诺和托米诺平铺(递推)

    790. 多米诺和托米诺平铺 有两种形状的瓷砖:一种是 2x1 的多米诺形,另一种是形如 "L" 的托米诺形.两种形状都可以旋转. XX <- 多米诺 XX <- &q ...

  2. LeetCode 790. 多米诺和托米诺平铺

    LeetCode 790. 多米诺和托米诺平铺 一.题目(经典动态规划) 二.解题思路 1. 铺满2*N面积: 2. 对于第i列,有4种情况: 3. N-1 -> N 转移方程: 三.核心代码 ...

  3. 多米诺和托米诺平铺(动态规划)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 729.多米诺和托米诺平铺 动态规划 代码实现 最近看到的一道经典的动态规划题,做个笔记记录一下(题目来自leetcode) 7 ...

  4. 本科团队例会分享1 多米诺与托米诺平铺问题 c语言

    多米诺与托米诺平铺 题目 题目来源 题目描述 我的解法与讲解(动态规划) 二维数组解 优化 空间优化 最优解 题目 题目来源 leetcode第790题. 题目描述 有两种形状的瓷砖:一种是 2 x ...

  5. LeetCode 790. 多米诺和托米诺平铺(动态规划)

    文章目录 1. 题目 2. 解题 1. 题目 有两种形状的瓷砖: 一种是 2x1 的多米诺形, 另一种是形如 "L" 的托米诺形. 两种形状都可以旋转. XX <- 多米诺X ...

  6. 790. 多米诺和托米诺平铺

    https://leetcode-cn.com/problems/domino-and-tromino-tiling/ 有两种形状的瓷砖:一种是 2x1 的多米诺形,另一种是形如 "L&qu ...

  7. 790leetcode多米诺和托米诺平铺

    题目描述 有两种形状的瓷砖:一种是 2 x 1 的多米诺形,另一种是形如 "L" 的托米诺形.两种形状都可以旋转. 给定整数 n ,返回可以平铺 2 x n 的面板的方法的数量.返 ...

  8. 【790. 多米诺和托米诺平铺】

    来源:力扣(LeetCode) 描述: 有两种形状的瓷砖:一种是 2 x 1 的多米诺形,另一种是形如 "L" 的托米诺形.两种形状都可以旋转. 给定整数 n ,返回可以平铺 2 ...

  9. 790 多米诺和托米诺平铺

    题目描述: 有两种形状的瓷砖:一种是 2x1 的多米诺形,另一种是形如 "L" 的托米诺形.两种形状都可以旋转. XX <- 多米诺 XX <- "L&quo ...

最新文章

  1. 71张图详解IP 地址、IP 路由、分片和重组、三层转发、ARP、ICMP
  2. ehcache memcache redis 三大缓存
  3. Cannot start compilation:the output path is not specifired for module “xxx“.Specify the output path
  4. 浅谈PopupWindow弹出菜单
  5. [SQL实战]之查找当前薪水排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不准使用order by
  6. 5.1(统计正数和负数的个数然后计算这些数的平均值)
  7. 排名算法(三)--排序学习
  8. 分布式计算、统计学习与ADMM算法
  9. linux安装杰奇远程采集,杰奇linux远程采集,采集器网站分离
  10. 火影忍者ol服务器维护中,火影忍者ol3月31日更新了什么?维护到几点?新增神无毗桥模拟战...
  11. 美团笔试题解2022-3-12号
  12. js弹窗确认取消php,JS实现删除时的确认弹窗
  13. 基于数字孪生的IBV智能建筑可视化系统了解一下
  14. 格兰杰因果关系检验的局限性
  15. python爬虫爬取《战狼Ⅱ》影评
  16. 卡西欧计算机开机键,卡西欧手表怎么开机
  17. stm32h7内存分配_【STM32H7教程】第26章 STM32H7的TCM,SRAM等五块内存的超方便使用方式...
  18. 百度一面+二面+三面
  19. 爱思服务器能不能更新苹果手机系统,iPhone 无法更新系统怎么办?
  20. 美通企业日报 | 阿迪达斯和碧昂丝达成标志性合作;万豪国际公布亚太区2020年发展愿景...

热门文章

  1. Win11微软账户无法正常登录怎么回事?
  2. 增值税发票内容的识别
  3. NV21 图像旋转处理 ( 后置摄像头顺时针旋转 90 度 | 前置摄像头顺时针旋转 90 度 )
  4. 带你图文解析ArrayList源码
  5. 乐高机械组雅马哈MT-10 SP即将交付,重现街车之王
  6. Ambassador让K8s更容易、更快地访问网络
  7. 阿里P8架构师谈:2019的Java程序员要怎么提升?拿30K高薪?
  8. Java:OOA和UML,一场调兵遣将的“组织架构”的游戏而已
  9. 掌上英雄联盟APP利用Charles下载图片
  10. java 实现最优二叉树_哈夫曼树(最优二叉树) - Java实现