Java String数组基于n!/ r!(n-r)得到所有组合!

时间:2013-04-01 23:30:48

标签: java arrays string recursion combinations

我试图搜索它,但还没有找到确定的答案。 我正在尝试编写一个程序,将字符串数组与另一个字符串数组的所有组合进行比较,但这些组合具有与前一个数组相同数量的元素。 为了更好地解释,假设我有两个字符串数组,n = {alpha,beta,gamma,delta,epsilon}和r = {beta,gamma,delta}。 现在我要做的是,从集合'n'中获取所有组合(每个组合中的三个字符串),并将集合'r'与它们进行比较。如果我得到一个匹配,然后执行一些操作。 我知道要获得所有组合,我需要应用公式,

                            nCr = n!/r!(n-r)!   (where 0<=r<=n)
在我的情况下,

,n = 5,r = 3,总共得到10个组合。我需要生成所有这些组合(在这种情况下为10)并将它们与数组'r'进行比较。我还没有一个起点,我不希望得到一个答案,但对它如何实现(可能会递归地完成?)会有一点亮点。)会很棒! 提前谢谢。

1 个答案:

答案 0 :(得分:0)

鉴于您在评论中提供了额外的背景信息,这就是我的建议。

n 转换为一组以便于查询:

String[] n = {"alpha", "beta", "gamma", "delta", "epsilon"};
Set<String> nset = new HashSet<String>();
nset.addAll(Arrays.asList(n));

现在您可以检查它是否包含 r 的所有元素:

String[] r = {"beta", "gamma", "delta"};
if (nset.containsAll(Arrays.asList(r))) {
  // do something
}

可以使用多个不同的 r 数组重复此操作,并且它比迭代 n 的所有可能子集并将它们与特定的进行比较更有效> - [R