【剑指offer JZ10】矩形覆盖(递推的优势 递归次数较多时,内存占用也会随之增)
矩形覆盖
http://www.nowcoder.com/questionTerminal/72a5a919508a4251859fb2cfb987a0e6
1. 矩形覆盖问题的思路是,从左到右横着放/竖着放影响右侧空间的灵活度
- 竖着放的话灵活度是7,横着放的话 限定死了下面那个要横着放 右侧灵活度为6
2. f(n)=f(n-1)+f(n-2)
3. 写代码,但是很不幸,内存超限了,而且非常严重
class Solution {
public:
int rectCover(int number) {
//1个1种 2个2中 三个第一个竖着放 有两种 第一个横着放 只有一种
if(number==1)
return 1;
else if(number==2)
return 2;
else
return(rectCover(number-1)+rectCover(number-2));
}
};
4. 试试递推
5. 效率说明
2. 源代码
class Solution {
public:
int rectCover(int number) {
int sum=0;
//1个1种 2个2中 三个第一个竖着放 有两种 第一个横着放 只有一种
if(number<=3)
return number;
else
{
int a=2,b=3;
for(int i=3;i<number;i++)
{
sum=a+b;
a=b;
b=sum;
}
}
return sum;
}
};
