矩形覆盖
题目描述:
我们可以用2乘1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2乘1的小矩形无重叠地覆盖一个2乘n的大矩形,总共有多少种方法?
思路:2乘1的小矩形去覆盖2乘n的大矩形,当小矩形横着放时,则必有下面的或者下面的小矩形横着放,所以最后一步填充时,要么从n-2步 横着放两个,要么从n-1步竖着放 一个;可以采用动态规划;
代码:
class Solution {
public:
int rectCover(int number) {
if (number == 0)return 0;
if (number == 1)return 1;
vector<int>dp(number + 1, 0);
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= number; i++){
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[number];
}
};