剑指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
posted on 2021-06-10 17:16  雾恋过往  阅读(42)  评论(0编辑  收藏  举报

Live2D