LeetCode790多米诺和托米诺平铺

题目描述

  有两种形状的瓷砖:一种是 2 x 1 的多米诺形,另一种是形如 “L” 的托米诺形。两种形状都可以旋转。给定整数 n ,返回可以平铺 2 x n 的面板的方法的数量。返回对 109 + 7 取模 的值。平铺指的是每个正方形都必须有瓷砖覆盖。两个平铺不同,当且仅当面板上有四个方向上的相邻单元中的两个,使得恰好有一个平铺有一个瓷砖占据两个正方形。

解析

  题目最后一句翻译成人话就是用这两种瓷砖要铺满且不能有重合。动态规划,对当前的位置分成四种情况:上下两个都是空,上空,下空和都是满的。

class Solution {static final int MOD = 1000000007;public int numTilings(int n) {int[][] dp = new int[n + 1][4];dp[0][3] = 1;for(int i = 1; i <= n; i++) {dp[i][0] = dp[i - 1][3];dp[i][1] = (dp[i - 1][0] + dp[i - 1][2]) % MOD;dp[i][2] = (dp[i - 1][0] + dp[i - 1][1]) % MOD;dp[i][3] = (((dp[i - 1][0] + dp[i - 1][1]) % MOD + dp[i - 1][2]) % MOD + dp[i - 1][3]) % MOD;}return dp[n][3];}
}

  由于上面的过程可以写成矩阵乘法,可以用快速幂来计算。

class Solution {static final int MOD = 1000000007;public int numTilings(int n) {int[][] mat = {{0, 0, 0, 1},{1, 0, 1, 0},{1, 1, 0, 0},{1, 1, 1, 1}};int[][] matn = {{1, 0, 0, 0},{0, 1, 0, 0},{0, 0, 1, 0},{0, 0, 0, 1}};while (n > 0) {if ((n & 1) != 0) {matn = mulMatrix(matn, mat);}mat = mulMatrix(mat, mat);n >>= 1;}return matn[3][3];}public int[][] mulMatrix(int[][] m1, int[][] m2) {int n1 = m1.length, n2 = m2.length, n3 = m2[0].length;int[][] res = new int[n1][n3];for (int i = 0; i < n1; i++) {for (int k = 0; k < n3; k++) {for (int j = 0; j < n2; j++) {res[i][k] = (int) ((res[i][k] + (long) m1[i][j] * m2[j][k]) % MOD);}}}return res;}
}

在这里插入图片描述
  另外比较离谱的面向结果编程。

class Solution {public int numTilings(int n) {if(n==1) return 1;if(n==2) return 2;if(n==3) return 5;if(n==4) return 11;if(n==5) return 24;if(n==6) return 53;if(n==7) return 117;if(n==8) return 258;if(n==9) return 569;if(n==10) return 1255; if(n==20) return 3418626;if(n==30) return 312342182;if(n==40) return 833773577;if(n==50) return 451995198;if(n==60) return 882347204;if(n==70) return 155521223;if(n==80) return 621192477;if(n==90) return 632727593; if(n==100) return 190242381;if(n==119) return 853328156; if(n==211) return 374315309;if(n==232) return 25197135;if(n==262) return 718490430; if(n==428) return 401892698;if(n==449) return 288656278; if(n==500) return 603582422;if(n==574) return 461429539; if(n==630) return 189827198;if(n==668) return 218895443;if(n==694) return 74178564;if(n==699) return 939053561; if(n==700) return 637136622;if(n==728) return 217951151;if(n==758) return 446953183; if(n==802) return 473826217;if(n==814) return 443572580;if(n==829) return 969408247;if(n==865) return 305566409; if(n==951) return 326538883; if(n==1000) return 979232805; return 0;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/25276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

先进封装技术的一些优缺点探讨

半导体封装技术是半导体制造过程中的关键环节&#xff0c;它不仅保护了芯片免受物理损伤&#xff0c;还提供了电气连接和散热功能。随着技术的发展&#xff0c;出现了多种先进的封装技术&#xff0c;每种技术都有其特定的应用场景和优缺点。 --> 1. 传统封装技术 【优点】&…

【SpringBoot + Vue 尚庭公寓实战】根据类型查询标签列表接口实现(五)

【SpringBoot Vue 尚庭公寓实战】根据类型查询标签列表接口实现&#xff08;五&#xff09; 文章目录 【SpringBoot Vue 尚庭公寓实战】根据类型查询标签列表接口实现&#xff08;五&#xff09;1、查看接口2、进行开发 1、查看接口 启动项目 访问&#xff1a;http://localho…

macOS优化工具CleanMyMac2024免费版电脑性能提升 存储空间释放 电脑维护 高效易用 延长电脑使用寿命

【CleanMyMac】是一款专为macOS系统设计的优化和清理软件&#xff0c;它的核心特性就是帮助我们提升电脑性能&#xff0c;释放存储空间。&#x1f680; CleanMyMac绿色免费版下载如下&#xff1a;记得保存哈&#xff0c;以防失效&#xff1a; https://pan.quark.cn/s/9b08114…

HTML标签 label for 还是 htmlFor

文章目录 问题结论更多 问题 HTML标签&#xff1a; label 的属性 for 还是 htmlFor&#xff1f; MDN文档&#xff1a;https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label 结论 for 和 htmlFor 都可以使用&#xff0c;都是对的。在部分情况中&#xff0c;只能…

【React】Redux与React - 环境准备

配套工具 在React中使用redux&#xff0c;官方要求安装俩个其他插件 - Redux Toolkit 和 react-redux 配置基础环境 使用 CRA 快速创建 React 项目 npx create-react-app react-redux安装配套工具 npm i reduxjs/toolkit react-redux启动项目 npm run start

计算机网络复习题

期末题库复习1 一. 单选题&#xff08;共32题&#xff0c;100分&#xff09; 1. (单选题) 在脉冲起始时刻&#xff0c;有无跳变来表示“0”和“1”&#xff0c;且在脉冲中间时刻始终发生跳变的编码是&#xff08; &#xff09;。 A.非归零码 B.曼彻斯特编码 C.归零码 D.差…

物联网设计竞赛_8_Jetson Orin Nano安装pytorch与torchvision

我的新板子到了&#xff0c;型号是jetson orin Nano与之前的jetson nano稍有不同我发现库又得从新下载 我的pip3的版本是3.8.10&#xff0c;jetpack版本5.1.1&#xff0c;又得重新开始下载库&#x1f62d; 安装pytorch: 得科学上网&#xff1a; PyTorch for Jetson - Jetson …

【RAG入门教程03】Langchian框架-文档加载

Langchain 使用文档加载器从各种来源获取信息并准备处理。这些加载器充当数据连接器&#xff0c;获取信息并将其转换为 Langchain 可以理解的格式。 LangChain 中有几十个文档加载器&#xff0c;可以在这查看https://python.langchain.com/v0.2/docs/integrations/document_lo…

小白都可以通过U盘重装系统,再也不用花50块钱去安装系统啦

下载Ventoy 软件 1、今天带着大家通过Ventoy 安装Windows 11 系统。 2、首先我们通过官网如下地址&#xff1a;https://www.ventoy.net/cn/&#xff0c;找到我们对应系统的Ventoy 软件安装包。 3、通过官网可以找到软件包的地址地址&#xff0c;如下图所示。 4、如下就是我下…

弘君资本股市资讯:突发!英伟达,被查!

4家科技巨擘一同被查&#xff01; 科技巨擘们&#xff0c;正迎来反独占风暴。据美媒报道&#xff0c;美国将对英伟达、微软、OpenAI翻开反独占查询&#xff0c;这标志着监管部门对人工智能工作的查看力度越来越大。 与此一同&#xff0c;苹果也面对新费事。6月6日&#xff0c…

python-微分方程计算

首先导入数据 import numpy as np from scipy.integrate import odeint from scipy.optimize import minimize import matplotlib.pyplot as pltdata np.array([[30, 4],[47.2, 6.1],[70.2, 9.8],[77.4, 35.2],[36.3, 59.4],[20.6, 41.7],[18.1, 19],[21.4, 13],[22, 8.3],[2…

java线程相关知识点

Java多线程涉及以下几个关键点 1.线程生命周期&#xff1a;理解线程从创建到销毁的各个阶段&#xff0c;包括新建、运行、阻塞、等待、计时等待和终止。 2.线程同步&#xff1a;掌握如何使用synchronized关键字和Lock接口来同步代码&#xff0c;防止数据竞争和死锁。 3.线程间通…

数据分析必备:一步步教你如何用Pandas做数据分析(21)

1、Pandas 可视化 Pandas 可视化是指使用 Pandas 库中的函数和方法来创建数据可视化图表。Pandas 提供了一些基本的绘图功能&#xff0c;例如折线图、柱状图、饼图等&#xff0c;可以通过调用相应的函数来创建这些图表。 2、基本绘图&#xff1a;绘图 Series和DataFrame上的…

预期值与实际值对比

编辑实际值和预期值变量 因为在单独的代码当中&#xff0c;我们先定义了变量str&#xff0c;所以在matcher时传入str参数&#xff0c;但当我们要把这串代码写在testrun当中&#xff0c;改下传入的参数&#xff0c;与excel表做连接 匹配的结果是excel表中的expect结果&#xf…

有序二叉树java实现

类实现&#xff1a; package 树;import java.util.LinkedList; import java.util.Queue;public class BinaryTree {public TreeNode root;//插入public void insert(int value){//插入成功之后要return结束方法TreeNode node new TreeNode(value);//如果root为空的话插入if(r…

RK3288 android7.1 实现ota升级时清除用户数据

一&#xff0c;OTA简介(整包&#xff0c;差分包) OTA全称为Over-The-Air technology(空中下载技术)&#xff0c;通过移动通信的接口实现对软件进行远程管理。 1. 用途&#xff1a; OTA两种类型最大的区别莫过于他们的”出发点“&#xff08;我们对两种不同升级包的创建&…

【马琴绿绮】马维衡古琴之马氏汉风 明代杉木制;周身髹朱红色漆

【马琴绿绮式】马维衡古琴之马氏汉风 明代杉木制&#xff1b;琴体周身髹朱红色漆&#xff0c;鹿角霜灰胎&#xff1b;形体壮硕、风格高古&#xff1b;音色松透、浑厚&#xff0c;音质纯净&#xff0c;按弹舒适&#xff0c;手感丝滑。

Effective Java 2 遇到多个构造器参数时要考虑使用构建器

第2个经验法则&#xff1a;用遇到多个构造器参数时要考虑使用构建器&#xff08;consider a builder when faced with many constructor parameters&#xff09; 上一条讨论了静态工厂相对于构造器来说有五大优势。但静态工厂和构造器有个共同的局限性:它 们都不能很好地扩展到…

springcloudalibaba项目注册nacos,在nacos上修改配置项不生效问题

一、背景 之前的项目启动正常,后来发现springcloudalibaba的各版本匹配不正确,于是对项目中的springboot、springcloud、springcloudalibaba版本进行匹配升级,nacos1.4.2匹配的springboot、springcloud、springcloudalibaba版本与我的项目中的版本比较接近,于是我便重新安…

零基础入门篇①⑦ Python可变序列类型--集合

Python从入门到精通系列专栏面向零基础以及需要进阶的读者倾心打造,9.9元订阅即可享受付费专栏权益,一个专栏带你吃透Python,专栏分为零基础入门篇、模块篇、网络爬虫篇、Web开发篇、办公自动化篇、数据分析篇…学习不断,持续更新,火热订阅中🔥专栏限时一个月(5.8~6.8)重…