Question
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
关键词:动态规划
Solution
时间复杂度:O(N)
空间复杂度:O(1)
- Python
class Solution:
def rectCover(self, number):
if number < 3:
return number
pp, p = 1, 2
for i in range(number-2):
ans = pp + p
pp, p = p, ans
return ans
- C++
class Solution {
public:
int rectCover(int number) {
if(number<3)
return number;
int pp = 1;
int p = 2;
int ans = 0;
for(int i=3; i<=number; i++){
ans = pp + p;
pp = p;
p = ans;
}
return ans;
}
};