【剑指offer JZ10】矩形覆盖(递推的优势 递归次数较多时,内存占用也会随之增)

矩形覆盖

http://www.nowcoder.com/questionTerminal/72a5a919508a4251859fb2cfb987a0e6

1. 矩形覆盖问题的思路是,从左到右横着放/竖着放影响右侧空间的灵活度

  1. 竖着放的话灵活度是7,横着放的话 限定死了下面那个要横着放 右侧灵活度为6

图片说明
2. f(n)=f(n-1)+f(n-2)
图片说明
3. 写代码,但是很不幸,内存超限了,而且非常严重

class Solution {
public:
    int rectCover(int number) {
        //1个1种  2个2中 三个第一个竖着放 有两种  第一个横着放 只有一种
         if(number==1)
            return 1;
        else if(number==2)
            return 2;
        else
            return(rectCover(number-1)+rectCover(number-2));
    }
};

图片说明
4. 试试递推
图片说明
5. 效率说明
图片说明

2. 源代码

class Solution {
public:
    int rectCover(int number) {
          int sum=0;
        //1个1种  2个2中 三个第一个竖着放 有两种  第一个横着放 只有一种
         if(number<=3)
            return number;

        else
        {
            int a=2,b=3;
            for(int i=3;i<number;i++)
            {
                sum=a+b;
                a=b;
                b=sum;
            }
        }
        return sum;
    }
};
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务