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 };
  • 相关阅读:
    c++ 小记
    扁平化设计
    json 学习
    c#多线程下载
    php 序列化储存和转化 json_encode() json_decode($q,true)
    支付接口
    JSON.stringify 语法实例讲解 字符串
    jquery 单选框整个选中
    js戳和php戳时间换算
    windows mysql提示:1045 access denied for user 'root'@'localhost' using password yes 解决方案
  • 原文地址:https://www.cnblogs.com/pacino12134/p/11132274.html
Copyright © 2011-2022 走看看