劍指 offer:矩形覆蓋

題目描述

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

思路:2*n的大矩形可以看作是2*(n-1)的矩形加一個豎着的2*1的小矩形,也可以看做是2*(n-2)的矩形加兩個橫着的2*1的小矩形。

遞歸的思想,2*n矩形方法有 f(n) = f(n-1) + f(n-2),其中f(1)=1, f(2)=2.

public class Solution {
    public int RectCover(int target) {
        if(target == 0||target==1){  
            return 1;  
        }  
        if(target == 2){  
            return 2;  
        }  
        int one = 1;   
        int two = 2;  
        int sum = 0;  
        for(int i=3; i<=target;i++){  
            sum = one + two;  
            one = two;  
            two = sum;  
        }  
        return sum;  
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章