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 };
     
  • 相关阅读:
    python 装饰器
    python操作hbase
    python 数据压缩
    JsonSchema 启蒙
    python在webservice接口测试中的应用
    简单的python http接口自动化脚本
    解决python2安装MySQL-python模块报错
    实用小工具推荐(一)
    linux和mac使用virtualenv使用和安装
    少年,来点正能量吧!
  • 原文地址:https://www.cnblogs.com/lou424/p/5047684.html
Copyright © 2011-2022 走看看