我有从 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
- 等等...
您正在寻找排列公式:
nPk = n!/(n-k)!
就您而言,您有 9 个条目,并且您想要选择所有条目,即 9P9 = 9! = 362880
您可以在 O'Reilly 的“PHP Cookbook”的配方 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);
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)