10 矩形覆盖

题目描述

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
注意n==0的时候有0中方法。
 

当 n > 2 时,每次新增加一列,可以选择竖着放置一个 21 的小矩形或者横着放置两个 21 的小矩形。

如果选择竖着放置一个 2*1 的小矩形,那么前面的 n-1 列已经被覆盖了,剩下的问题就是覆盖 n-1 列的情况,即 f(n-1)。

如果选择横着放置两个 2*1 的小矩形,那么前面的 n-2 列已经被覆盖了,剩下的问题就是覆盖 n-2 列的情况,即 f(n-2)。

综上所述,可以得到递推公式:

f(n) = f(n-1) + f(n-2)

 
func rectCover( number int ) int {
    // write code here
    if number == 0 {
        return 0
    }
    if number == 1 {
        return 1
    }
    if number == 2 {
        return 2
    }
    a, b, c := 1, 2, 0
    for ; number > 2; number-- {
        c = a + b 
        a = b 
        b = c
    }
    return c 
}

 

posted @ 2021-04-07 22:26  zqlucky  阅读(37)  评论(0编辑  收藏  举报