​力扣解法汇总790. 多米诺和托米诺平铺

news2024/12/22 12:03:48

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

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

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

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

示例 1:

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

示例 2:

输入: n = 1
输出: 1

提示:

  • 1 <= n <= 1000

解题思路:

* 解题思路:
* 这一定是一道动态规划的题,如果我们去掉L型,那么就是一个斐波那契额数列,F(n)=F(n-1)+F(n-2)
* 加上L形状,我们仍然可以按照这个思路来。
* 开头只有四种可能,-,=,L,「。
* -和=开头的,我们可以归结为斐波那契额数列,f(n)=f(n-1)+f(n-2)
* L和「开头的,我们可以归结为一类问题,使用F(n)来表示,所以可以转换为f(n)=f(n-1)+f(n-2)+F(n)
* 我们再来看下F(n)怎解决?
* L开头的话,只有两种可能:
* L开头,以┐结尾,中间包含若干-形,其数量为f(n-3)+f(n-5)+f(n-7)...
* L开头,以」结尾,中间包含若干-形状,其数量为f(n-4)+f(n-6)+f(n-8)...
* 两种类型累加,就是F(n)的数量。
* 最后,每次计算对值求模,得到我们想要的结果

代码:

public class Solution790 {

    Map<Integer, Integer> fMap = new HashMap<>();
    int flag = 10_0000_0000 + 7;

    public int numTilings(int n) {
        fMap.put(0, 1);
        fMap.put(1, 1);
        fMap.put(2, 2);
        int index = 3;
        while (index <= n) {
            int indexValue = fMap.get(index - 1) % flag + fMap.get(index - 2) % flag;
            indexValue = indexValue % flag;
            indexValue += (2 * F(index)) % flag;
            indexValue = indexValue % flag;
            fMap.put(index, indexValue);
            index++;
        }
        return fMap.get(n);
    }

    private int F(int index) {
        //L开头,」结尾
        int sum = 0;
        for (int i = 0; i <= index - 3; i += 2) {
            sum += fMap.get(index - 3 - i) % flag;
            sum = sum % flag;
        }
        if (index <= 3) {
            return sum;
        }
        for (int i = 0; i <= index - 4; i += 2) {
            sum += (fMap.get(index - 4 - i) % flag);
            sum = sum % flag;
        }
        //L开头,┐结尾
        return sum;
    }
}

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

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

相关文章

dubbo:docker安装dubbo-admin、zookeeper

0.引言 我们在搭建dubbo框架时&#xff0c;需要安装一个dubbo-admin来管理服务已经配置文件&#xff0c;今天我们来看看如何通过docker快速搭建一个dobbo-admin 1. 安装 1、首先到dockerhub上搜索dubbo-admin的镜像源 2、可以看到两个引用较高的镜像源&#xff0c;第一个是a…

了解区块链延迟和吞吐量

大家鲜少提到如何正确地测量一个&#xff08;区块链&#xff09;系统&#xff0c;但它却是系统设计和评估过程中最重要的步骤。系统中有许多共识协议、各种性能的变量和对可扩展性的权衡。 然而&#xff0c;直到目前都没有一种所有人都认同的可靠方法&#xff0c;能够让人进行…

Java#11(字符串练习)

目录 一.遍历字符串 1.public char charAt(int index): 根据索引返回字符 2.public int length(): 返回此字符串的长度 3.数组的长度:数组名.length 4.字符串的长度: 字符串对象.length() 二.统计字符个数 前提基础了解: 三.反转字符串 如何思路清晰的定义方法? 一.遍…

力扣(LeetCode)891. 子序列宽度之和C++)

数学推理 贡献法 由题意可知&#xff0c;子序列的内部顺序不影响宽度&#xff0c;所以可以对子序列排序。得到正序序列。 如 1234561~2~3~4~5~61 2 3 4 5 6 &#xff0c; 序列中数字 444 的下标 i3i3i3 &#xff0c;对于数字 444 &#xff0c; 最大值为 444 的子序列个数为 2…

Web前端开发技术课程大作业——HTML5旅游景区景点(13页面)HTML+CSS+JavaScript

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

A-Level经济例题解析及练习Computing MPL and VMPL

知识点&#xff1a;Computing MPL and VMPL例题&#xff1a; Question: Computing MPL and VMPL P $5/bushel. Find MPL and VMPL, fill them in the blank spaces of the table. Then graph a curve with VMPL on the vertical axis, L on horizontal axis.解析&#xff1a;…

891. 子序列宽度之和(每日一难phase3-4)

891. 子序列宽度之和 一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。 给你一个整数数组 nums &#xff0c;返回 nums 的所有非空 子序列 的 宽度之和 。由于答案可能非常大&#xff0c;请返回对 109 7 取余 后的结果。 子序列 定义为从一个数组里删除一些&…

简单工厂模式、工厂模式、抽象工厂模式和加入反射、配置优化后的抽象工厂模式之间的关系和区别

通过两张图简单解释一下什么是简单工厂模式、工厂模式、抽象工厂模式 简单工厂模式是属于创建型模式&#xff0c;又叫做静态工厂方法&#xff08;Static Factory Method&#xff09;模式&#xff0c;但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种…

Mac上 Word安装Mendeley插件

Mac上 Word安装Mendeley插件问题背景解决方法针对Mendeley Desktop针对Mendeley Reference Manager参考链接问题背景 可能因如同时安装了Word和WPS等&#xff0c;导致Word上安装Mendeley插件失败&#xff08;Unable to install the Microsoft Word Plugin&#xff09;。目前网…

协同细菌觅食优化算法(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

知识蒸馏IRG算法实战:使用ResNet50蒸馏ResNet18

摘要 复杂度的检测模型虽然可以取得SOTA的精度&#xff0c;但它们往往难以直接落地应用。模型压缩方法帮助模型在效率和精度之间进行折中。知识蒸馏是模型压缩的一种有效手段&#xff0c;它的核心思想是迫使轻量级的学生模型去学习教师模型提取到的知识&#xff0c;从而提高学…

Golang入门笔记(11)—— 包

使用包的原因&#xff1a; 1.不可能把所有的不同业务功能的函数都放在一个源文件中&#xff0c;这样不便于管理。通常的做法是&#xff1a;我们会把具有相同一些功能和业务的维度的函数&#xff0c;分门别类的放在不同的源文件中。 2.不同的包名&#xff0c;可以解决两个函数…

Java面对对象的特征之二:继承性 :why?

一、继承性的好处&#xff1a; 减少了代码的冗余&#xff0c;提高了代码便于功能的扩展为之后的多态性的使用&#xff0c;提高了前提 二、继承性的格式&#xff1a;class A extends B{} A:子类、派生类、subclass B&#xff1a;父类、超类、基类、superclass 提现&#xff1…

数据中台解决方案-最新全套文件

数据中台解决方案-最新全套文件一、建设背景面临的挑战1、数据孤岛2、管理困难3、感知不强4、融合不足5、响应滞后二、思路架构三、建设方案四、获取 - 数据中台全套最新解决方案合集一、建设背景 在数字化转型及大数据战略布局背景下&#xff0c;建设大数据平台及数据应用。其…

idea连接kerberos认证的hive

其实用dbeaver连接hive就可以了。但是呢&#xff0c;idea也有这个功能&#xff0c;本着研究下的想法就试试。 结果最后成功了 最后记录下。 参考文章。感觉不太行 PyCharm,idea通过插件database连接带Kerberos的hive_不饿同学的博客-CSDN博客 里面提到了两个解决办法&#…

D. Non-zero Segments(前缀和)

Problem - 1426D - Codeforces 题意: 科利亚得到一个整数数组a1,a2,...,an。这个数组既可以包含正整数也可以包含负整数&#xff0c;但是Kolya不喜欢0&#xff0c;所以这个数组不包含任何零。 Kolya不喜欢他的数组中某些子段的总和为0&#xff0c;子段是数组中一些连续的元素…

IDR 学习笔记

Multiview Neural Surface Reconstruction by Disentangling Geometry and Appearance 主页&#xff1a;https://lioryariv.github.io/idr/ 论文&#xff1a;https://arxiv.org/abs/2003.09852 代码&#xff1a;https://github.com/lioryariv/idr 效果展示 idr_fountain效果图…

【面试题】循环队列队列实现栈栈实现队列

1️⃣设计循环队列OJ链接 2️⃣用队列实现栈OJ链接 3️⃣用栈实现队列OJ链接 这几道面试题需要栈和队列的知识&#xff0c;它们的相关知识可以看我的上一篇文章 1️⃣设计循环队列 先来了解一下环形队列&#xff0c;这也是循环队列的思想&#xff0c;空间是固定的&#xff0c;数…

Kafka分区策略

默认分区器DefaultPartitioner &#xff08;1&#xff09;指明partition的情况下&#xff0c;直 接将指明的值作为partition值&#xff1b; &#xff08;2&#xff09;没有指明partition值但有key的情况下&#xff0c;将key的hash值与topic的 partition数进行取余得到partiti…

代谢组学——最接近生物表型的组学

■ 什么是代谢组学 在基于基因组-转录组-蛋白质组-代谢组的系统生物学框架内&#xff0c;代谢组学 (metabolomics/metabonomics) 处于最下游&#xff0c;最接近生物表型&#xff0c;主要通过考察生物体系在某一特定时期内受到刺激或扰动前后所有小分子代谢物 (分子量小于 1500…