如何解决排列-所有可能的数字集?
开发过程中遇到排列-所有可能的数字集的问题如何解决?下面主要结合日常开发的经验,给出你关于排列-所有可能的数字集的解决方法建议,希望对你解决排列-所有可能的数字集有所启发或帮助;问题描述
您正在寻找置换公式:
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);
}
}
}
解决方法
我有从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
- 等等…