题目:
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2*1 的小矩形无重叠地覆盖一个 2*n 的大矩形,总共有多少种方法?
思路:
依然是【斐波那契数列】
当 n = 0 时,return 0;
当 n = 1 时,return 1;
当 n = 2 时,两个小矩形同时横着或者竖着,return 2;
当 n > 2 时,举个栗子:
假如 n = 5,当第一个小矩形竖着覆盖时,剩下的四个小矩形有几种方式覆盖,就意味着有几种覆盖方式;
当第一个小矩形横着覆盖时,其同一列下的另一个位置已经被确定为横着覆盖,那么剩下的三个小矩形有几种方式覆盖,就意味着有几种覆盖方式;
所以有 f(5) = f(4) + f(3)。
综上所述:f(n) = f(n - 1) + f(n - 2)
代码:
public class Solution {
public int RectCover(int target) {
if (target <= 2) {
return target;
} else {
return RectCover(target - 1) + RectCover(target - 2);
}
}
}