牛客网&剑指Offer&矩阵覆盖
代码实现
class Solution {
public:
int rectCover(int number) {
int s1 = 1;
int s2 = 2;
int result = 0;
if(number == 1)
return 1;
if(number == 2)
return 2;
for(int num = 3; num <= number; num++)
{
result = s2 + s1;
s1 = s2;
s2 = result;
}
return result;
}
};
编程笔记
-
代码实现解题思路:列出对于n=1.2.3.4.5每种情况下的结果,找出规律;
当n=1时,只有1种方法,为‘|’;
当n=2时,只有2种方法,为‘| |’ 或者‘=’;
当n=3时,分两种情况,第一种情况为第一块矩形放置方式为‘|’,则剩余f(n=2)种方法;第二种情况为第一块矩形放置方式为‘-’,那么第二块矩形必须在第一块矩形下面,第一块与第二块矩形为‘=’,剩余f(n=1)种情况;
当n=4时,分两种情况,第一种情况为第一块矩形放置方式为‘|’,则剩余f(n=3)种方法;第二种情况为第一块矩形放置方式为‘-’,那么第二块矩形必须在第一块矩形下面,第一块与第二块矩形为‘=’,剩余f(n=2)种情况;
…
根据规律可得出:f(n) = f(n-1) + f(n-2); -
对于这类题目必须要先列出前面几种情况然后找出其规律。