1. 程式人生 > >劍指offer-10:矩形覆蓋

劍指offer-10:矩形覆蓋

題目描述

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

思路

和跳臺階差不多
當第一次豎方向填充時,則規模縮小為target-1:
在這裡插入圖片描述
當第一次橫方向填充時,則規模縮小為target-2:
在這裡插入圖片描述
綜上分析:遞迴式是RectCover(target)=RectCover(target-1)+RectCover(target-2);
當然邊界條件要設定n=1、2、0。

程式碼

public class Solution10 {
    

    public int RectCover(int target)
{ if (target <=0) { return 0; } else if (target == 1) { return 1; }else if(target == 2) { return 2; }else { return RectCover(target-1) + RectCover(target-2); } } public static void main(String[] args) {
Solution10 solu=new Solution10(); System.out.printf("%d",solu.RectCover(5)); } }