剑指offer 10、 覆盖矩阵 python和c++
题目描述:
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
比如n=3时,2*3的矩形块有3种覆盖方法:
思路:其实这也是一个斐波那契数列,也是跳台阶,我们考虑一个问题,2*n的矩阵怎么才能得到?
答案是:
1、在2(n-1)的后面加一个竖着的21的矩阵
2、在2(n-2)的后面加两个横着的21的矩阵
没了。
想不想跳台阶嘛,那不就是吗,所以代码也简单了
c++版
class Solution {
public:
int rectCover(int number) {
if(number<3)
return number;
int num1 = 1, num2 = 2, res = 0; //初始化
for(int i = 2; i < number; ++i){
res = num1 + num2;
num1 = num2;
num2 = res;
}
return res;
}
};
python版
# -*- coding:utf-8 -*-
class Solution:
def rectCover(self, number):
if number < 3:
return number
num1,num2 = 1, 2 #初始化跳到第一楼和第二楼的跳法
for i in range(2,number):
res = num1 + num2
num1 = num2
num2 = res
return res
# write code here