3

我有一个包含 10 个数字的数组。我想要可用的 10 个数字中的所有三个数字的组合。但是,顺序无关紧要。也就是说,我不希望以不同的顺序组合相同的数字(在生成 1、2、3 之后,不应该出现 2、3、1)。此外,数字不应在组合中重复(即没有 1、1、1)。我知道如何使用 foreach 创建表,但我一直坚持如何生成可能的组合。谢谢你的帮助!

4

3 回答 3

0

数字不能重复,那是否意味着1,2,1也不允许?如果是这样,作为第一步删除给定集合中的所有重复数字,正如死锁所暗示的那样。然后使用算法找到组合。许多此类算法都包含在其他用户建议的“重复”问题中。

于 2013-03-06T11:58:00.100 回答
0

一个好的方法是使用array_unique()从数组中删除重复项。然后,每次你使用一个元素时,你应该使用它来弹出它,array_pop()这样它就不会被再次使用。

于 2013-03-06T11:41:54.377 回答
0

在这里借用user187291的答案,并进行一些修改以满足您的需求,以下应该是您想要的:

$a = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);

$len  = count($a);
$list = array();

for($i = 1; $i < (1 << $len); $i++) {
    $c = '';
    for($j = 0; $j < $len; $j++)
        if($i & (1 << $j))
            $c .= ',' . $a[$j];
    $list[] = ltrim($c, ',');
}

$answer = array();

foreach ($list as $comb)
{

  if (3 == count(explode(',', $comb)))
  {
    $answer[] = $comb;
  }

}

echo '<pre>' . print_r($answer, true);
于 2013-03-06T11:59:41.707 回答