题目
- 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
分析
- 先找规律,n<=0时,结果肯定返回0
- n = 1时,返回值为1;n=2时,返回值为2;n=3时,返回值为3等等
- 当为n时,还是按照之前的思想,化整为零,从一处着手
- 现在看第一个1*1的位置,它有两种放置的方式,横着或者竖着放置矩形
- 当它竖着放置的时候,剩余的就是f(n-1)种放置方法
- 当它横着的时候,下面的两个也只能横着,剩余的就是f(n-2)种方式
- 所以最终这也是一个斐波那契数列
解题代码
public class Solution {
public int RectCover(int target) {
if(target <= 0) return 0;
if(target == 1) return 1;
if(target == 2) return 2;
int a = 1;
int b = 2;
int sum = 0;
for( int i = 3; i <= target; i++ )
{
sum = a + b;
a = b;
b = sum;
}
return sum;
}
}
- 总结
- 细节入手,分析规律,善于归纳总结,才能抓住问题本质。