题目描述:
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路:
这题和前面的那道跳台阶是一模一样的题,也是动态规划,这里的2*1的小矩形横着放就是跳2阶,竖着放就是跳1阶,当大矩形长度小于等于2时,方法数量为长度本身;当大于2时,即为d[i]=d[i-1]+d[i-2],但是递归调用太耗时,就用迭代。
代码:
class Solution {
public:
int rectCover(int number) {
if(number<=2){//当number小于等于2,直接返回number
return number;
}
else{
int pre=1;
int now=2;
int tmp;//用来存储原来的now,在now更新后赋给pre
for(int i=3;i<=number;i++){//当number>3时,种数为前两个种数相加
tmp=now;
now=now+pre;
pre=tmp;
}
return now;
}
}
};
输出结果:运行时间: <1 ms 占用内存:8568K 状态:答案正确