1. 程式人生 > >劍指offer刷題-矩形覆蓋問題

劍指offer刷題-矩形覆蓋問題

1. 跳臺階

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

題目分析

我們從簡單的開始看。
圖1
如上圖1,可以先放兩個疊著的,再放一個豎著的,
或者
在這裡插入圖片描述
可以先放1個豎著的,再放兩個疊著的
後面的排列其實都隨意,我們每次操作都可以選擇是放兩個疊著的,或者放一個豎著的,這個題目其實和爬樓梯的題目答案一樣,因此我們直接使用跑樓梯的程式碼即可。

n 結果數 f(n)
0 0
1 1
2 2
3 3
4 5
n f(n-1) + f(n-2)

下面是程式碼實現,當n<=2時,返回定義好的陣列,當大於2時,開始進行迴圈計算。相比於遞迴演算法,時間複雜度要小,因為每次計算的結果都儲存了下來。

# -*- coding:utf-8 -*-
# python2.7
class
Solution: def rectCover(self, n): # write code here re = [0,1,2] if n<=2: return re[n] else: for i in range(3,n+1): re.append(re[i-1] + re[i-2]) return re[n]