10.2 矩形覆盖(剑指 Offer 题解Java版)

10.2 矩形覆盖

题目描述

我们可以用 2 * 1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2 * 1 的小矩形无重叠地覆盖一个 2 * n 的大矩形,总共有多少种方法?
在这里插入图片描述

题目链接

NowCoder

关于分治法

       分治法,分而治之。就是将原问题划分为n个规模较小,结构与原问题类似的小问题进行处理,递归地解决这些问题,然后再合并求解的过程。

       分治法在解决的流程上分为三个步骤:

       1.分解:将原问题划分为n个规模较小,结构与原问题类似的小问题。

       2.解决:若子问题规模小,足以处理,则求解,否则继续递归处理。

       3.合并:将子问题的解,合并成为原问题的解。

解题思路
当 n 为 1 时,只有一种覆盖方法:

在这里插入图片描述
当 n 为 2 时,有两种覆盖方法:
在这里插入图片描述
要覆盖 2n 的大矩形,可以先覆盖 21 的矩形,再覆盖 2*(n-1) 的矩形;或者先覆盖 22 的矩形,再覆盖 2(n-2) 的矩形。而覆盖 2*(n-1) 和 2*(n-2) 的矩形可以看成子问题。该问题的递推公式如下:

在这里插入图片描述

代码实现

package 矩形覆盖;/*
作者     :XiangLin
创建时间 :28/02/2020 21:05
文件     :RC.java
IDE      :IntelliJ IDEA
*/

public class RC {
    public int RectCover(int n){
        if (n <= 2){
            return n;
        }
        int pre2 = 2,pre1 = 1;
        int result = 0;
        for (int i = 3; i <= n; i++){
            result = pre2 + pre1;
            pre1 = pre2;
            pre2 = result;
        }
        return result;
    }

    public static void main(String[] args) {
        RC rc = new RC();
        int n = rc.RectCover(6);
        System.out.println(n);
    }
}

在这里插入图片描述
个人微信公众号,专注于学习资源、笔记分享,欢迎关注。我们一起成长,一起学习。一直纯真着,善良着,温情地热爱生活。
五角钱的程序员,专注于学习资源、笔记分享。

Though unconsciously, people are indeed moving towards their destination. Slow as the progress, seen from the result, it may be surprisingly fast.
即使是无意识的,人也总是在朝着自己想去的方向前进。虽然前进的步伐实际上是很缓慢的,但从结果来看,却是出人意料的迅速。

XiangLin
2020年2月28日于重庆城口
好好学习,天天向上,终有所获

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值