请问排列-所有可能的数字集

排列-所有可能的数字集

我有数字,从0到8。结果,所有可能的集合,每组都应该使用所有的数字,每个数字只能在一组中出现一次。

我希望看到用PHP编写的解决方案可以打印出结果。或者,至少,我希望在组合学理论上有所补充,因为我早已忘记了这一点。计算有多少排列的公式是什么?

示例集:

  • 0-1-2-3-4-5-6-7-8

  • 0-1-2-3-4-5-6-8-7

  • 0-1-2-3-4-5-8-6-7

  • 0-1-2-3-4-8-5-6-7

  • 0-1-2-3-8-4-5-6-7

  • 0-1-2-8-3-4-5-6-7

  • 以此类推.。


aluckdog
浏览 354回答 3
3回答

Helenr

你在寻找排列公式:nPk = n!/(n-k)!在您的例子中,您有9个条目,并且要选择所有条目,即9P9=9!=362880您可以在O‘Reilly的“PHPCookbook”的配方4.26中找到一个用于置换的PHP算法。pc_permute(array(0, 1, 2, 3, 4, 5, 7, 8));复制自O‘Reilly:function pc_permute($items, $perms = array( )) {     if (empty($items)) {          print join(' ', $perms) . "\n";     }  else {         for ($i = count($items) - 1; $i >= 0; --$i) {              $newitems = $items;              $newperms = $perms;              list($foo) = array_splice($newitems, $i, 1);              array_unshift($newperms, $foo);              pc_permute($newitems, $newperms);          }     }}

红颜莎娜

由于这个问题经常出现在Google搜索结果中,下面是接受的答案的修改版本,它返回数组中的所有组合,并将它们作为函数的返回值传递。function pc_permute($items, $perms = array( )) {     if (empty($items)) {         $return = array($perms);     }  else {         $return = array();         for ($i = count($items) - 1; $i >= 0; --$i) {              $newitems = $items;              $newperms = $perms;          list($foo) = array_splice($newitems, $i, 1);              array_unshift($newperms, $foo);              $return = array_merge($return, pc_permute($newitems, $newperms));          }     }     return $return;}使用:$value = array('1', '2', '3');print_r(pc_permute($value));
打开App,查看更多内容
随时随地看视频慕课网APP