矩形覆盖

本文探讨了使用2*1小矩形覆盖2*n大矩形的问题,通过递归算法求解不同大小矩形的覆盖方案数量。对于n=0,1,2的情况给出直接解答,并针对n≥3的情形提出了递归解决方案。

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



题目描述

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
public class Solution {
    public int RectCover(int target) {
        if (target <= 0) {
			return 0;
		}
		if (target <= 2) {
			return target;
		} else {
			return RectCover(target - 1) + RectCover(target - 2);
		}
    }
}
分析:程序中的target相当与题目中的n。
当n=0时,是不需要覆盖的,返回值为 0;
当n=1时,即是用1个2*1的小矩形覆盖一个2*1的大矩形,只有1种方法,返回n的值也即是返回1;
当n=2时,即是用2个2*1的小矩形覆盖一个2*2的大矩形,可以横着覆盖,也可以竖着覆盖,有2中方法,返回n的值也即是返回2 ;
当n>=3时,覆盖的时候可以横着也可以竖着,当第一次是竖着覆盖,则覆盖的方法为RectCover(n-1)种,当第一次是横着覆盖,则覆盖的方法为RectCover(n-2)。因此,当n>=3时,覆盖方法共有RectCover(n-1)+RectCover(n-2)种。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值