剑指offer_10:矩形覆盖
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路:2*n的情况相当于2*(n-1)时放一块的情况加上2*(n-2)时放两块的情况
1、动态规划
public class Solution {
public int RectCover(int target) {
if(target<3) return target;
int[] dp=new int[target+1];
dp[0]=0;
dp[1]=1;
dp[2]=2;
for(int i=3;i<=target;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[target];
}
}
2、动态规划优化
public class Solution {
public int RectCover(int target) {
if(target<3) return target;
int first=1;
int second=2;
for(int i=3;i<=target;i++){
int sum=first+second;
first=second;
second=sum;
}
return second;
}
}