JAVA实现矩形覆盖问题(《剑指offer》)

本文探讨使用2*1小矩形无重叠覆盖2*n大矩形的问题,并提供了一种基于斐波那契数列的Java解决方案。该方法通过迭代计算不同长度下覆盖方式的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。
请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
最近在刷《剑指offer》里的编程题,但是网上关于《剑指offer》的解答多半是C或者C++的,而且官方(作者)也是在用C++进行讲解,这里自己用java写了一些题目的解答代码(当然也有部分是借鉴了网上别人的解答的,出处未注明敬请之处请指出,侵删),希望能对大家的学习有所帮助。
牛客网问题框架截图:


解答:
<pre name="code" class="java">public class Solution {
    public int RectCover(int target) {
         //对实参进行预处理当然是必不可少的
        if(target<0) return 0; 
        
        int f0 = 0, f1 = 1; 
        int fn = f0 + f1; 
//这个问题最后也可以转化为斐波那契数列来思考:当大矩形的长度为n时,前两格的覆盖方式有两种,第一种是在第一格上竖着放一个小矩形,这样后面的空格的方法就和大矩形长度为n-1时一样;第二种是在前两格横着放置两格小矩形,这样后面的空格的放置方法就和大矩形长度为n-2时的一样
        for(int i=2; i<=target;i++){ 
            f0 = f1; 
            f1 = fn; 
            fn = f0 + f1; 
        } 
        return fn; 
    }
}




牛客网编译通过截图:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值