可能重复:
Display possible combinations of string
algorithm that will take numbers or words and find all possible combinations
如果我有3个字符串,例如:
"abc def xyz"
我想通过重新排列这些字符串找到我可以生成的最大组合数,例如:
等。计算这个的公式/算法是什么?
答案 0 :(得分:8)
这不是一种组合,而是排列。算法 n!,其中n是元素的数量。
为什么?
因为你有三个值放置在三个地方,所以对于第一个地方你有三个选项,第二个只有两个(因为你已经宫殿第一个字符串)和最后你只有一个选项。
3 * 2 * 1 = 3! = 6
但是如果你可以重复那些选择而不是重复排列
所以对于第一名你可以选择3个字符串,第二个也可以选择一个
3 * 3 * 3 = 3 ^ 3 = 27
n ^ k - 其中n是字符串的数量,k是“位置”的数量
代码算法如下所示:
function fact($n)
{
if ($n == 0)
{
return 1;
}
else
{
return $n * fact($n - 1);
}
}
这是一个递归的例子
答案 1 :(得分:1)
如果我没记错的话就是n!组合
所以对于9你会有
9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 = 362880种组合
答案 2 :(得分:0)
考虑排列。 O'Reilley通过谷歌提供了一些很好的信息。如果我有一些额外的时间,我会尝试为你起草一个例子。
<强>更新强>
以下是一些代码,如果它正常工作,则不是100%,但您应该能够根据需要对其进行修改(核心代码来自O'Reilley网站,fyi):
<?php
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);
}
}
}
pc_permute(array('abc', 'xyz', 'def', 'hij'));
?>
修改强>
只是看到他想要算法,或者代码应该为其他潜伏者生成结果:)请参阅算法的其他答案,这是n!
答案 3 :(得分:0)
3 * 2 * 1 = 6阶乘!
3弦= 6种组合...... 4个字符串= 24个组合.....等