zoukankan      html  css  js  c++  java
  • 【剑指offer】10 矩形覆盖

    题目地址:矩形覆盖

    题目描述                                   

    我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
     
    比如n=3时,2*3的矩形块有3种覆盖方法:
     

    题目示例                                   

    输入:
    4
    返回值:
    5

    解法分析                                   

    这道题同样是考察斐波那契数列,思路:我们可以假设大矩形是横放的(高固定为2,宽为n),这时可以看出,小矩形竖着放占用1单位宽度,横着放占用2单位宽度,是不是很熟悉?没错,与青蛙跳台阶一个思路,竖着放就是跳一节台阶,横着放就是跳2节台阶,那么算法自然而然就出来了。

    代码                                         

    算法1:

     1 function rectCover(number)
     2 {
     3     // write code here
     4     if(number<=3){
     5         return number;
     6     }else{
     7         var fib = [];
     8         fib[1] = 1;
     9         fib[2] = 2;
    10         fib[3] = 3;
    11         for(var i=4;i<=number;i++){
    12             fib[i]=fib[i-2]+fib[i-1];
    13         }
    14         return fib[number];
    15     }
    16 }

    算法2:

     1 function rectCover(number)
     2 {
     3     // write code here
     4     if(number==0)return 0;
     5     var res = 1, mid = 1;
     6     while(number--){
     7         mid+=res;
     8         res=mid-res;
     9     }
    10     return res;
    11 }

    执行结果                                   

  • 相关阅读:
    vs2005把Project Templates 制成VSI文件
    Provider Modal
    Pluge模式?反射?后期绑定?
    Widget化时代,个性化信息定制时代(2)
    Yahoo! widget 教程002第一个widget
    PHP 要点记录
    DWZ富客户端框架(jQuery RIA framework)
    DXCore for Visual Studio 简介
    DevExpress產品種類描述
    DevExpress Tools啟動加載問題解決辦法
  • 原文地址:https://www.cnblogs.com/sunlinan/p/14209692.html
Copyright © 2011-2022 走看看