美文网首页
面试题10(4):矩阵覆盖

面试题10(4):矩阵覆盖

作者: 潘雪雯 | 来源:发表于2020-05-10 15:20 被阅读0次

    题目

    用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用8个2*1的小矩形无重叠地覆盖一个2*8的大矩阵,总共有多少种方法?


    image.png

    解题思路

    把2*8的覆盖方法记为f(8)。
    用第一个2*1的小矩形去覆盖大矩形的最左边时有两种选择:竖着放或者横着放。
    当竖着放的时候,右边还剩下2*7的区域,这种情形下的覆盖方法记为f(7)。
    当横着放的时候,当2*1的小矩形横着放在左上角的时候,左下角必须和横着放一个2*1的小矩形,而在右边剩下2*6的区域,这种情况下的覆盖方法记为f(6).因此f(8)=f(7)+f(6)。

    代码

    class Solution {
    public:
        int rectCover(int number) {
            int a = 1;
            int b = 2;
            int result;
            
            if(number == 0){
                result = 0;
            }
            else if(number == 1){
                result = 1;
            }
            else if(number == 2){
                result = 2;
            }
            else{
                for(int i = 3; i <= number; i++){
                    result = a + b;
                    a = b;
                    b = result;
                }
            }
            return result;
        }
    };
    

    完整代码见Github

    相关文章

      网友评论

          本文标题:面试题10(4):矩阵覆盖

          本文链接:https://www.haomeiwen.com/subject/nbsjnhtx.html