使用set num of digits生成包含所有字符排列的字符串

时间:2016-05-14 22:41:53

标签: php permutation

我想生成一个字符串,它将生成一组字符的所有排列。

但是,我不希望任何数字重复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;

感谢您的帮助!

0 个答案:

没有答案