描述
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,从同一个方向看总共有多少种不同的方法?
比如n=3时,23的矩形块有3种不同的覆盖方法(从同一个方向看):
输入描述:
2*1的小矩形的总个数n
返回值描述:
覆盖一个2*n的大矩形总共有多少种不同的方法(从同一个方向看)
示例1
输入:
0
返回值:
0
示例2
输入:
1
返回值:
1
示例3
输入:
4
返回值:
5
递归:
class Solution { public: int rectCover(int number) { if (number < 3) return number; return rectCover(number-1) + rectCover(number-2); // 递归 } };
动态规划:
class Solution { public: int rectCover(int number) { if (number < 3) return number; else { int dp1 = 3, dp2 = 2, dp; // 动态规划 for (int i = 4; i <= number; ++i) { dp = dp1 + dp2; dp2 = dp1; dp1 = dp; } return dp; } } };