给定字符生成器和长度,如何生成所有可能字符串的列表?

时间:2018-12-18 15:14:47

标签: php recursion generator

例如,假设['a', 'b'](作为生成器)和2作为长度

该函数将输出一个生成器,该生成器将产生:

'',
'a',
'b',
'ab'
'ba'
'aa'
'bb'

或给定['a']且长度为3:

'',
'a',
'aa',
'aaa',

您可以想象,如果添加更多字母或增加长度,该集合会变得更大,它应该列出给定字符的所有排列,直到长度为止

1 个答案:

答案 0 :(得分:3)

这是一个不言自明的解决方案。

//Returns all permuations of a certain length.
function perm($ls, $len)
{
    if($len <= 0)
        yield '';
    else
        foreach ($ls as $x)
            foreach(perm($ls, $len-1) as $i)
               yield $x.$i;
}

//Returns all permuations of all lengths less or equal to the supplied integer.
function all_perm($ls, $len) {
    //$ls = iterator_to_array($ls);
    for($x=$len; $x>=0; $x--)
        foreach(perm($ls, $len-$x) as $string)
            yield $string;
}

只需使用您的数组和最大长度调用 all_perm 。如果绝对必须将参数用作生成器,则取消注释 $ ls = iterator_to_array($ ls);