1. 程式人生 > >劍指offer演算法-----矩形覆蓋

劍指offer演算法-----矩形覆蓋

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

分析與實現:由於是2*n的大矩形,同時這個矩形的長度不變,只有寬度n一直在變。

經過分析會發現覆蓋的方法其實和佔滿寬度n的方式一樣。所以這個問題就變成了類似如下問題:有一根長為n的繩子,每次切割長度是1或者2,問有多少種切割方法?(這其實和青蛙跳臺階是類似問題)

public int RectCover(int target) {
        if(target==1)
            return 1;
        if(target==2)
            return 2;
        int n1=1;
        int n2=2;
        int result=0;
        for(int i=3;i<=target;i++){
            result=n1+n2;
            n1=n2;
            n2=result;
        }
        return result;
    }