前言
最近有道云笔记老是没响应,会员也这样,所以把算法的笔记公开到这个csdn,也算是公开的鞭策。
题目常练习起点位置: https://www.nowcoder.com/ta/coding-interviews?asc=false&order=knowledgePoint
2018年12月4日, 20点07分
题目描述
我们可以用2*1
的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1
的小矩形无重叠地覆盖一个2*n
的大矩形,总共有多少种方法?
我的思路
枚举,画图,没有坚持下来,但是方向是对的
给出我的画图成果
给出别人画图成果
tdo 1204 @ 1210
https://www.nowcoder.com/profile/562667/codeBookDetail?submissionId=1519959
很赞,一下子看懂了: 当我们考虑面积是n个的时候,可以考虑我们放第一个矩形块是怎么放的,如果是 是这样:
那么需要考虑的是后面的n-1 个2*1 小方块怎么放就好,所以是 func(target - 1)
如果这样的话:(你横着放)
底下两个xx 的位置一定要那样放啊,所以你考虑后面的n -2 个方块,所以是 func(target - 2)
通过分析一块的摆放方式,归纳出前后之间的联系,由此发现斐波那契数列的规律,大赞!
solu
public class Solution {
public int RectCover(int target) {
if (target <= 0) return 0;
if (target == 1) return 1;
if (target == 2) return 2;
return RectCover(target - 1) + RectCover(target - 2);
}
}
恭喜你通过本题
运行时间:570ms
占用内存:9332k