zoukankan      html  css  js  c++  java
  • (剑指offer) 矩形覆盖

    题目描述

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

    (1)当 n < 1时,显然不需要用2*1块覆盖,按照题目提示应该返回 0。
    (2)当 n = 1时,只存在一种情况。

    (3)当 n = 2时,存在两种情况。

    (4)当 n = 3时,明显感觉到如果没有章法,思维难度比之前提升挺多的。

    ... 尝试归纳,本质上 n 覆盖方法种类都是对 n - 1 时的扩展。
    可以明确,n 时必定有 n-1时原来方式与2*1的方块结合。也就是说, f(n) = f(n-1) + ?(暂时无法判断)。
    n = 1时, f(n) = 1;
    n = 2时, f(n) = 2;
    n > 2时,f(n) = f(n - 1) + f(n - 2);
    很明确还是斐波那契数列的规律
    只不过我们不用递归来做,用迭代效率更高
    function rectCover(number){
        if(number == 0 || number == 1 || number == 2){
            return number
        }
        let current
        let re1 = 2
        let re2 = 1
        for(let i = 3; i<= number; i++) {
            current = re1 + re2
            re2 = re1
            re1 = current
        }
        return current
    }

     

    不积跬步无以至千里
  • 相关阅读:
    微博回调接口
    vue获取微博授权URL
    生成微博授权url接口
    微博账号注册
    电脑程式直接打开文件
    关于 transparent rgba display:none; opacity visiblity 关于em
    定位及部分属性
    盒模型以及部分小笔记
    htm基础知识,css的链入以及标签分类。
    JS函数01
  • 原文地址:https://www.cnblogs.com/lyt0207/p/12522987.html
Copyright © 2011-2022 走看看