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 }