劍指 JZ10矩形覆蓋

2021-10-07 12:07:17 字數 840 閱讀 3110

題目描述

我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋乙個2*n的大矩形,總共有多少種方法?

比如n=3時,2*3的矩形塊有3種覆蓋方法:

解題思路

記憶化遞迴

這了可以以長來做判斷,這裡長就是n,每次填充要麼豎著填充即填充1,要麼橫著填充即填充2,所以和斐波那契數列有點像

# -*- coding:utf-8 -*-

class solution:

def __init__(self):

self._dict = {}

def rectcover(self, number):

# write code here

def dfs(n):

if n == 0:

return 1

if n < 0:

return 0

if n in self._dict:

return self._dict[n]

self._dict[n] = dfs(n - 1) + dfs(n - 2)

return self._dict[n]

if number == 0:

return 0

res = dfs(number)

return res

s = solution()

print(s.rectcover(3))

JZ 10矩形覆蓋

題目描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?eg 比如n 3時,23的矩形塊有3種覆蓋方法 解法 如果到這裡,還沒有發現規律怎麼辦呢?那我們就再分析以下,從n 3到n 4,怎麼來的呢?這裡有2種情況 直接在...

10 矩形覆蓋(劍指offer)

10.矩形覆蓋 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?1.思路 以2x8的矩形為例。示意圖如下 我們先把2x8的覆蓋方法記為f 8 用第乙個1x2小矩陣覆蓋大矩形的最左邊時有兩個選擇,豎著放或者橫著放。當豎著放...

劍指offer 10 矩形覆蓋

題目 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?思路 斐波那契數列的變種,為什麼是斐波那契數列的變種?首先我們 認為小矩形為n的時候的總數是n,而那麼根據組合數學裡的加法原理,我把此題分為兩類,第一類就是小矩形1 ...