zoukankan      html  css  js  c++  java
  • 【剑指Offer】08矩形覆盖

    题目描述

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

    时间限制:1秒;空间限制:32768K

    解题思路

    经过分析,这还是一个斐波那契数列。

    当n=1时,覆盖方法f(1) 有固定1种; 

    当n=2时,覆盖方法f(2) 有固定2种;

    当n>2时,覆盖方法有f(n) = f(n-1) + f(n-2)种,是在第n-1种方案基础上竖着覆盖一个和在第n-2种方案基础上横着覆盖两个的结果和,其他情况都被包含在第n-1和第n-2种方案里了。

    Python代码:

    # -*- coding:utf-8 -*-
    class Solution:
        def rectCover(self, number):
            # write code here
            i = 1
            j = 2
            if number==0:
                return 0
            if number==1:
                return 1
            if number==2:
                return 2
            while number>2:
                j += i
                i = j - i
                number -= 1
            return j

    注意考虑number=0这种特殊情况的处理。

  • 相关阅读:
    【代码笔记】JTable 、TableModel的使用3
    学习JSP(二)
    Tomcat文件配置
    学习JSP(一)
    配置elipse
    配置Jdk
    定义新运算练习题
    学习JAVA所需的东西
    学习秘籍
    总有那么一个人
  • 原文地址:https://www.cnblogs.com/yucen/p/9912052.html
Copyright © 2011-2022 走看看