我們可以用2 * 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 * 1的小矩形無重疊地覆蓋乙個2 * n的大矩形,總共有多少種方法?
當n=1,f(n)=1f(n)=1
當n=2,f(n)=2f(n)=2
當n>2時,當第乙個小矩形橫著放時,擺法有f(n-1)f(n−1)
當第乙個小矩形豎著放時,擺法有f(n-2)f(n−2)
f(n)=f(n-1)+f(n-2)f(n)=f(n−1)+f(n−2)
思路一:
用遞迴求解
思路二:
用迭代求解
package recursion;
/** * 我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋乙個2*n的大矩形,總共有多少種方法?
* 思路:
* 當n=1,f(n)=1
* 當n=2,f(n)=2
* 當n>2時,當第乙個小矩形橫著放時,擺法有f(n-1)
* 當第乙個小矩形豎著放時,擺法有f(n-2)
* f(n)=f(n-1)+f(n-2)
*/public class solution06
/*** 用遞迴的方法
** @param target n
* @return 擺法
*/public int rectcover(int target) else if (target == 1) else if (target == 2) else
}/**
* 迭代的方法
劍指offer 矩形覆蓋
我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?觀察題目中的矩形,2 n的,是個長條形。本來腦中想象的是複雜的華容道,但是既然只是簡單的長條形,那麼依然逆向分析。既然是長條形的,那麼從後向前,最後乙個矩形2 2的,只有兩...
劍指Offer 矩形覆蓋
題目描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?思路 這個也是跳青蛙的變形 但是要自己找出當前的鋪法和以前鋪法的關係 注意到 情況一 當前塊的話可以由上一塊加上當前這一塊的豎著放 情況二 或者是 上上一塊加上兩...
劍指offer 矩形覆蓋
1 題目描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?2 思路 遞迴呼叫 若不存在小矩形,則返回0 若只存在乙個小矩形,則只有一種方法,返回1 若存在兩個小矩形,則存在兩種方法,返回2 若小矩形的數量大於2,則若...