题目:
我们可以用2 *1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路: 还是斐波那契数列的性质,利用递归或者迭代
Java
package nowcoder;
public class S10_RectCover {
public int rectCover(int target){
if (target <= 0)
return 0;
else if (target <= 2)
return target;
//递归的方法
/* else
return rectCover(target-1)+rectCover(target-2);*/
//迭代的方法
int f = 2; int g = 1;
while (--target > 0){
f = f + g;
g = f - g;
}
return g;
}
public static void main(String[] args){
S10_RectCover s10 = new S10_RectCover();
System.out.print(s10.rectCover(10));
}
}
Python
class RectCover:
def rectCover(self, number):
res = [0, 1, 2]
while len(res) <= number:
res.append(res[-1]+res[-2])
return res[number]
if __name__ == '__main__':
test = RectCover()
print(test.rectCover(10))