题目描述
我们可以用 2 ∗ 1 2*1 2∗1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n n n 个 2 ∗ 1 2*1 2∗1 的小矩形无重叠地覆盖一个 2 ∗ n 2*n 2∗n 的大矩形,总共有多少种方法?
一、解题思路
以 8 ∗ 2 8*2 8∗2 为例:
我们可以看出,这是个斐波那锲数列, f ( 1 ) = 1 , f ( 2 ) = 2 f(1) = 1,f(2) = 2 f(1)=1,f(2)=2
二、Java
代码
public class Solution {
public int RectCover(int target) {
if(target <= 2){
return target;
}
int tmp[] = {1, 2};
int result = 0;
for(int i = 3; i <= target; i++){
result = tmp[0] + tmp[1];
tmp[0] = tmp[1];
tmp[1] = result;
}
return result;
}
}
三、C++
代码
class Solution {
public:
int rectCover(int number) {
if(number <= 2){
return number;
}
int tmp[] = {1, 2};
int result = 0;
for(int i = 3; i <= number; i++){
result = tmp[0] + tmp[1];
tmp[0] = tmp[1];
tmp[1] = result;
}
return result;
}
};
四、Python3
代码
# -*- coding:utf-8 -*-
class Solution:
def rectCover(self, number):
# write code here
if number <= 2:
return number
tmp = [1, 2]
result = 0
for i in range(2, number):
result = tmp[0] + tmp[1]
tmp[0] = tmp[1]
tmp[1] = result
return result