zoukankan      html  css  js  c++  java
  • 一周刷完剑指offer-10-矩形覆盖

    矩形覆盖

    1. 题目描述

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

    2. 示例

    比如n=3时,2*3的矩形块有3种覆盖方法:

    image

    3. 解题思路

    还是找规律的一道题,归根结底还是 斐波那契数列

    如果是n=1 -> 1种

    如果是n=2 -> 2种

    如果是n=3 -> 3种

    如果是n=4 -> 5种

    注意,这里Python使用递归方法也是不能通过的,超过运行所要求的的时间

    4. Java实现

    public class Solution {
        public int RectCover(int target) {
            if (target <= 0) return 0;
            if (target == 1) return 1;
            if (target == 2) return 2;
            
            return (RectCover(target - 1) + RectCover(target - 2));
    
        }
    }
    

    5. Python实现

    # -*- coding:utf-8 -*-
    class Solution:
        def rectCover(self, number):
            # write code here
            if number <= 0:
                return 0
            if number == 1:
                return 1
            if number == 2:
                return 2
            
            a, b = 1, 2
            for i in range(number-2):
                a, b = b, a+b
            return b
    

    如果您觉得本文有用,请点个“在看”

    image.png

  • 相关阅读:
    REHの个人主页
    多项式基础学习笔记(2)
    多项式基础学习笔记(1)
    FFT & NTT 学习笔记
    LCT学习笔记
    莫队学习笔记
    SAM 学习笔记
    网络流学习笔记
    关于魔术球贪心做法的证明
    【题解】异或粽子&加强版
  • 原文地址:https://www.cnblogs.com/junge-mike/p/13685711.html
Copyright © 2011-2022 走看看