zoukankan      html  css  js  c++  java
  • 矩形覆盖

    【题目描述】

        我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
     
    【解题思路】
        我们不妨把2*n的覆盖方法记作f(n)。假设从左向右进行覆盖。最后一次用一个1*2的小矩形去覆盖大矩形最右边时,有两种选择,竖着放或者横着放。当竖着放的时候,左边还剩下2*(n-1)的区域,这种情形下的覆盖方法记作f(n-1);接下来考虑横着放的情况。当一个1*2的小矩形去覆盖大矩形右下方的时候,其上方还需要横着放置一个1*2的小矩形,但其放置方法是固定的,只有一种方法,这时左边剩下2*(n-2)的区域需要覆盖,这种情形下的覆盖方法记作:f(n-2)。因此,我们得到递推公式:f(n)=f(n-1)+f(n-2)。仍然是我们熟悉的斐波那契数列题,代码几乎是呼之欲出了。
    【代码实现】
     1 class Solution {
     2 public:
     3     int rectCover(int number) {
     4         if(number<=1)
     5             return 1;
     6         int target=0;
     7         int first=1;
     8         int second=1;
     9         for(int i=2;i<=number;++i)
    10         {
    11             target=first+second;
    12             first=second;
    13             second=target;
    14         }
    15 
    16         return target;
    17     }
    18 };
     
  • 相关阅读:
    分母为0一定会抛异常吗?
    [译]Zookeeper的优点与局限性
    明明有class为什么还是报ClassNotFoundException?
    广告倒排索引架构与优化
    KafkaProducer源码分析
    Kafka服务端之网络连接源码分析
    Sublime常用快捷键
    sublime主题设置
    Sublime前端插件
    安装软件,更新软件,删除软件
  • 原文地址:https://www.cnblogs.com/lou424/p/5047684.html
Copyright © 2011-2022 走看看