我想生成一个字符串,它将生成一组字符的所有排列。
但是,我不希望任何数字重复3次,(只有两次),我想更高效地做到这一点......我在下面解决了它,但我知道它可以更高效...它是在285人物现在很长..
<?php
function arrayToString(&$array, $string)
{
//var_dump( $array);
//var_dump( $string);
$res = "";
for ($i = 0; $i < count($array) - 1; $i++)
{
//echo "i = $i<br />";
//echo "array[i] = {$array[$i]}<br /><br />";
$res .= $string[$array[$i]];
}
return $res;
}
function incrementArray(&$array, $max)
{
$index = count($array) - 1;
return addOneToArray($array, $index, $max);
}
function addOneToArray(&$array, $index, $max)
{
if ($index < 0 )
return 0;
if ($array[$index] == $max - 1)
{
$array[$index] = 0;
return addOneToArray($array, $index - 1, $max);
}
$array[$index] += 1;
return 1;
}
function getPermutations ($source)
{
$len = count($source);
$resString = "";
$array = [0,0,0,0,0];
$i = 1;
while ($i > 0)
{
$testString = arrayToString($array, $source);
// echo "test string ". $testString;
if ( strpos($resString, $testString) === false)
$resString .= $testString;
$i = incrementArray($array, count($source));
}
return $resString;
}
$source = ["3", "5", "7", "9"];
echo getPermutations($source);
// $resString;
感谢您的帮助!