我必须写下这个方法:
public int domino(int num)
我有一个二维整数数组,大小2 x num
(2
行和num
列)
我需要找到有多少种方法可以填满多米诺骨牌块
(每个多米诺骨牌填满2个接触而不是对角线的细胞)
我应该使用递归来做到这一点但是
我想也许有办法可以做到这一点:
return(some sort of combinatorics formula )
有这个公式吗?
感谢
答案 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,可以轻松验证。
基本上是斐波那契复发,其具有封闭形式的解决方案。