当前位置: 首页 > wzjs >正文

网站做视频好不好指数查询

网站做视频好不好,指数查询,网站手机版二维码怎么做,濮阳网站建设专家团队【LetMeFly】790.多米诺和托米诺平铺:难想条件的简单动态规划 力扣题目链接:https://leetcode.cn/problems/domino-and-tromino-tiling/ 有两种形状的瓷砖:一种是 2 x 1 的多米诺形,另一种是形如 "L" 的托米诺形。两种…

【LetMeFly】790.多米诺和托米诺平铺:难想条件的简单动态规划

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

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

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

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

 

示例 1:

输入: n = 3
输出: 5
解释: 五种不同的方法如上所示。

示例 2:

输入: n = 1
输出: 1

 

提示:

  • 1 <= n <= 1000

解题方法:动态规划

力扣的@灵茶山艾府有张不错的图(来自这个题解):

理解图

可以使用 f [ i ] f[i] f[i]代表铺满 i i i列的方案数,那么对于最右边的可以独立切割出来的矩形(也就是图上蓝色部分)有三种情况。

什么叫“最右边的可以独立切割出来的矩”?就是说“最右边蓝色部分无法被竖着一刀分成左右两个部分”。

因为若能竖着一刀将右边蓝色部分分成左右两个部分,那么左边部分的方案数一定已经被 f [ j ] f[j] f[j]计算过了。

三种情况如下:

  1. 最右边的蓝色独立矩形是一个竖着的 1 × 2 1\times 2 1×2,可以在 f [ i − 1 ] f[i-1] f[i1]的基础上得到
  2. 最右边的蓝色独立矩形是两个横着的 2 × 1 2\times 1 2×1,可以在 f [ i − 2 ] f[i-2] f[i2]的基础上得到
  3. 最右边的蓝色独立矩形完全交错排列,无法被竖着一刀分割,可以分别在 f [ i − 3 ] f[i-3] f[i3] f [ i − 4 ] f[i-4] f[i4] ⋯ \cdots f [ 0 ] f[0] f[0]的基础上得到,并且每种都有上下两种摆放方式。

也就是说: f [ i ] = f [ i − 1 ] + f [ i − 2 ] + 2 × ∑ j = 0 i − 3 f [ j ] f[i]=f[i-1]+f[i-2]+2\times\sum_{j=0}^{i-3}f[j] f[i]=f[i1]+f[i2]+2×j=0i3f[j]

但是这样的时间复杂度是 O ( n 2 ) O(n^2) O(n2),有没有一种更快的求法?有:

f [ i ] − f [ i − 1 ] f[i]-f[i-1] f[i]f[i1]是多少呢?

f [ i ] − f [ i − 1 ] = f [ i − 1 ] + f [ i − 2 ] + 2 × ∑ j = 0 i − 3 f [ j ] − f [ i − 2 ] + f [ i − 3 ] + 2 × ∑ j = 0 i − 4 f [ j ] = f [ i − 1 ] + f [ i − 3 ] f[i]-f[i-1]=f[i-1]+f[i-2]+2\times\sum_{j=0}^{i-3}f[j]\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -f[i-2]+f[i-3]+2\times\sum_{j=0}^{i-4}f[j]\\ \ =f[i-1]+f[i-3] f[i]f[i1]=f[i1]+f[i2]+2×j=0i3f[j]                              f[i2]+f[i3]+2×j=0i4f[j] =f[i1]+f[i3]

所以有 f [ i ] = 2 × f [ i − 1 ] + f [ i − 3 ] f[i]=2\times f[i-1]+f[i-3] f[i]=2×f[i1]+f[i3]

实现容易推导难。

  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( n ) O(n) O(n)

不难发现,求 f [ i ] f[i] f[i]时只会用到 f [ i − 1 ] f[i-1] f[i1] f [ i − 3 ] f[i-3] f[i3]两个变量,因此实际上我们使用 4 4 4个变量滚动式地循环使用即可将空间复杂度降低到 O ( 1 ) O(1) O(1)

AC代码

C++
/** @Author: LetMeFly* @Date: 2025-05-05 21:58:06* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-05-05 22:23:11*/
const int MOD = 1e9 + 7;class Solution {
public:int numTilings(int n) {if (n == 1) {return 1;}vector<int> dp(n + 1);dp[0] = dp[1] = 1;dp[2] = 2;for (int i = 3; i <= n; i++) {dp[i] = ((dp[i - 1] * 2) % MOD + dp[i - 3]) % MOD;}return dp.back();}
};
Python
'''
Author: LetMeFly
Date: 2025-05-05 21:58:06
LastEditors: LetMeFly.xyz
LastEditTime: 2025-05-05 22:25:56
'''
MOD = 1000000007class Solution:def numTilings(self, n: int) -> int:if n == 1:return 1dp = [0] * (n + 1)dp[0] = dp[1] = 1dp[2] = 2for i in range(3, n + 1):dp[i] = (dp[i - 1] * 2 + dp[i - 3]) % MODreturn dp[-1]
Java
/** @Author: LetMeFly* @Date: 2025-05-05 21:58:06* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-05-05 22:28:23*/
class Solution {private static int MOD = 1000000007;public int numTilings(int n) {if (n == 1) {return 1;}int[] dp = new int[n + 1];dp[0] = dp[1] = 1;dp[2] = 2;for (int i = 3; i <= n; i++) {dp[i] = ((dp[i - 1] * 2) % MOD + dp[i - 3]) % MOD;}return dp[n];}
}
Go
/** @Author: LetMeFly* @Date: 2025-05-05 21:58:06* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-05-05 22:38:29*/
package mainvar MOD int = 1000000007func numTilings(n int) int {if n == 1 {return 1}dp := make([]int, n + 1)dp[0] = 1dp[1] = 1dp[2] = 2for i := 3; i <= n; i++ {dp[i] = (dp[i - 1] * 2 % MOD + dp[i - 3]) % MOD}return dp[n]
}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

http://www.dtcms.com/wzjs/157875.html

相关文章:

  • 做电子商务的网站网页设计与制作作业成品
  • 宝山网站建设制作seo深度优化公司
  • 淮南建设局网站备案汕头seo推广外包
  • 上海网站建设 缔客免费人脉推广
  • 唐山企业网站建设深圳优化seo
  • 腾讯云网站建设做网站公司哪家正规
  • 网站建设 图书线上推广是什么意思
  • 关于建设饮食与健康网站的意义网上推广赚钱项目
  • 怎么做网站上面的那种卡通图片企业培训课程名称大全
  • 凡客诚品网站以品牌推广为目的的广告网络平台
  • 坚持网站机制建设网站提交入口链接
  • 个人可以做商城网站吗百度云搜索引擎入口网盘搜索神器
  • 展示型网站 数据库seo网站推广实例
  • 做营销看的网站有哪些内容策划方案
  • 在哪个网站开发外贸业务什么是网络营销推广
  • 西宁网站建设服务公司什么是软文营销?
  • 开原网站建设自助网站建设
  • 手机网站开发多少钱今日广州新闻最新消息
  • 专门做网站的公司与外包公司有哪些yandex引擎
  • react用于做PC网站武汉网络推广网络营销
  • 自己电脑上做网站别人访问企业网站推广技巧
  • 公司网站建设的营销策略范文
  • 学服装设计培训哪里好东莞做网站排名优化推广
  • 网站备案被注销了百度站长平台链接提交
  • 到哪里找人做网站广西南宁做网站的公司
  • 做网站用织梦好吗国外网站排名前十
  • wordpress自动锚文本广州seo培训
  • 怎么在jsp网站做验证码搜索引擎优化分析
  • 网站子站建设自查报告百度账号管理中心
  • 在线男人和女人做那件事网站淘宝推广方式