10.2 矩形覆盖
题目描述
我们可以用 2 * 1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2 * 1 的小矩形无重叠地覆盖一个 2 * n 的大矩形,总共有多少种方法?
题目链接
关于分治法
分治法,分而治之。就是将原问题划分为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日于重庆城口
好好学习,天天向上,终有所获