用dominos填充2 x n数组

时间:2016-06-10 09:42:09

标签: arrays combinatorics

我必须写下这个方法:

public int domino(int num)

我有一个二维整数数组,大小2 x num2行和num列)

我需要找到有多少种方法可以填满多米诺骨牌块

(每个多米诺骨牌填满2个接触而不是对角线的细胞)

我应该使用递归来做到这一点但是

我想也许有办法可以做到这一点:

return(some sort of combinatorics formula )

有这个公式吗?

感谢

1 个答案:

答案 0 :(得分:0)

这可以通过简单的重复方法来完成。假设T(n)是可以填充2 x n板的方式的数量。

现在考虑最左上角的单元格。覆盖它的多米诺骨牌可以有两种可能的方式。

1)水平2)垂直

在案例1中,由于该多米诺骨牌是水平的,因此下面的单元格也必须由水平多米诺骨牌填充。在此之后,仍然有一个2 x(n-2)板,可以T(n-2)方式填充。

在第二种情况下,仍然有一个2 x(n-1)板,可以T(n-1)方式填充。

所以填充2 x n电路板的总方式是

T(n) = T(n-1) + T(n-2),基本情况是,T(1)= 1,可以轻松验证。

基本上是斐波那契复发,其具有封闭形式的解决方案。