裴涛 发表于 2025-7-9 07:15:09

剑指offer-10、矩阵覆盖

题目描述

我们可以用 2 * 1 的小矩形横着或者竖着去覆盖更大的矩形。请问用n个 2 * 1 的小矩形无重叠地覆盖一个2 * n的大矩形,总共有多少种方法?
比如n=3时,2 * 3 的矩形块有3种覆盖方法:

思路及解答

我们需要用若干个2×1的小矩形(可以横放或竖放)无重叠地覆盖一个2×n的大矩形,求总共有多少种不同的覆盖方法。例如当n=3时,共有3种覆盖方法。
通过观察小规模案例,我们可以发现:

[*]n=1时,只有1种方法(竖放)
[*]n=2时,有2种方法(两个竖放或两个横放)
[*]n=3时,有3种方法
[*]n=4时,有5种方法
显然,这形成了一个类似斐波那契数列的规律:f(n) = f(n-1) + f(n-2)。这一题其实和上面青蛙跳台阶和斐波那契数列是一样的,变的只是场景。
递归

递归是解决这类问题最直观的方法。对于2×n的矩形,我们考虑第一块小矩形的放置方式:

[*]如果竖着放,则剩下的部分是2×(n-1)的矩形,有f(n-1)种方法
[*]如果横着放,则下方也必须横放一块,剩下的部分是2×(n-2)的矩形,有f(n-2)种方法
因此,总方法数为这两种情况之和:f(n) = f(n-1) + f(n-2),这正是斐波那契数列的递推关系
public class Solution {    public int rectCover(int n) {      if (n

姊囝 发表于 2025-10-31 03:40:17

前排留名,哈哈哈

悯拄等 发表于 2025-11-1 21:41:44

谢谢分享,辛苦了

幌斛者 发表于 2025-11-3 04:45:19

收藏一下   不知道什么时候能用到

汝雨竹 发表于 2025-11-3 12:00:23

喜欢鼓捣这些软件,现在用得少,谢谢分享!

乳杂丫 发表于 2025-12-15 23:53:40

这个有用。

挚魉 发表于 2025-12-21 06:20:50

热心回复!

葛雅隽 发表于 2026-1-19 11:05:38

喜欢鼓捣这些软件,现在用得少,谢谢分享!

咪四 发表于 2026-1-20 17:56:37

不错,里面软件多更新就更好了

哈妙思 发表于 2026-1-22 06:41:52

感谢分享,下载保存了,貌似很强大

坡琨 发表于 2026-1-22 10:51:04

感谢分享,下载保存了,貌似很强大

少琼 发表于 2026-1-27 04:52:34

感谢,下载保存了

归悦可 发表于 2026-1-27 07:31:28

谢谢分享,试用一下

眩疝诺 发表于 2026-1-27 22:15:30

很好很强大我过来先占个楼 待编辑

睁扼妤 发表于 2026-1-28 05:01:10

感谢分享

伯斌 发表于 2026-2-1 05:29:45

谢谢楼主提供!

铵滔 发表于 2026-2-2 02:26:51

前排留名,哈哈哈

柩通奉 发表于 2026-2-4 10:12:40

这个有用。

曲愍糙 发表于 2026-2-5 04:24:40

yyds。多谢分享

迭婵椟 发表于 2026-2-5 06:07:03

感谢,下载保存了
页: [1] 2
查看完整版本: 剑指offer-10、矩阵覆盖