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

    思想:

    分治法(递归法):

    分治法,分而治之。就是将原问题划分为n个规模较小,结构与原问题类似的小问题进行处理,递归地解决这些问题,然后再合并求解的过程。

      分治法在解决的流程上分为三个步骤:

      1.分解:将原问题划分为n个规模较小,结构与原问题类似的小问题。

      2.解决:若子问题规模小,足以处理,则求解,否则继续递归处理。

      3.合并:将子问题的解,合并成为原问题的解。

    第一步如果采用竖方向放:

    那么问题就变成了用 n-1 个 2x1 的小矩形去覆盖 2x(n-1) 的大矩形。

    第一步如果采用横方向放:

    那么问题就变成了用 n-2 个2x1 的小矩形去覆盖 2x(n-1) 的大矩形。

    递归公式为:Fn = Fn-1 + Fn-2

    递归法太耗空间资源,可以只保存前两项的结果就可以了。

    python

     1 # -*- coding:utf-8 -*-
     2 class Solution:
     3     def rectCover(self, number):
     4         # write code here
     5         res = [0,1,2]
     6         if number <= 2:
     7             return res[number]
     8         while number!=len(res)-1:
     9             res.append(res[-1]+res[-2])
    10         return res[-1]

    c++

    用一个双端队列来保持前两项

     1 class Solution {
     2 public:
     3     int rectCover(int number) {
     4         if(number<=0) return 0;
     5         else if(number==1) return 1;
     6         else if(number==2) return 2;
     7         deque<int> res;
     8         res.push_back(1);
     9         res.push_back(2);
    10         for(int i=0;i<number-2;i++){
    11             res.push_back(res.front()+res.back());
    12             res.pop_front();
    13         }
    14         return res.back();
    15     }
    16 };
  • 相关阅读:
    BizTalk2010简介
    各大类库的类工厂
    全国城市三级级联菜单(java+Ajax+jQuery)
    gcc编译系统
    通用排行榜组件
    本地化中文示例代码需求调查
    PortalBasic Java Web 应用开发框架(源码、示例及文档)
    FFLIB 框架
    ORM/IOC框架设计感悟
    个人日记
  • 原文地址:https://www.cnblogs.com/pacino12134/p/11132274.html
Copyright © 2011-2022 走看看