• 【剑指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 }

    执行结果                                   

  • 相关阅读:
    数据查询语句
    数据操作语句
    数据定义语句
    linux的常用命令
    NIO/IO/AIO阻塞/非阻塞/同步/异步
    XCode使用自带SVN,SVN命令
    正则表达式大全——持续更新中。。。
    sql语句优化
    sql一些语句性能及开销优化
    高质量图片无损压缩算法
  • 原文地址:https://www.cnblogs.com/sunlinan/p/14209692.html
Copyright © 2020-2023  润新知