题目描述
我们可以用 2X1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2X1 的小矩形无重叠地覆盖一个 2Xn 的大矩形,总共有多少种方法?
思路解析
当n为1时,只有一种覆盖方式
当n为2时,有两种覆盖方式
覆盖 2Xn 的大矩形,可以先覆盖 2X1 的矩形,再覆盖 2X(n-1) 的矩形;或者先覆盖 2X2 的矩形,再覆盖 2X(n-2) 的矩形。而覆盖 2X(n-1) 和 2X(n-2) 的矩形可以看成子问题。该问题的递推公式如下:
/// <summary>
/// 问题求解可以简化为求取斐波那契数列
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
public int Cover(int n)
{
if (n<=2)
{
return n;
}
int pre = 1, cur = 2;
int sum = 0;
for (int i = 3; i <=n; i++)
{
sum = pre + cur;
pre = cur;
cur = sum;
}
return sum;
}