【问题标题】:How do you generate a list of all possible strings given a generator of characters and a length?给定字符生成器和长度,如何生成所有可能字符串的列表?
【发布时间】:2019-05-19 01:08:30
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 也许this 可以帮助处理排列,然后它只是处理长度。你有没有试过我们能看到的东西?这是一个有趣的问题。
  • 您可以从this 开始并更改sampling 函数以满足您的需要,或者在另一个循环中使用它以获得不同的长度

标签: php recursion generator


【解决方案1】:

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

//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);.

【讨论】:

  • 你能参考你从哪里得到这个吗?
  • @Blackbam 我刚刚写的。
  • 不错。简短而有效。
  • 谢谢,我在这方面的尝试远没有那么优雅或实用
  • 使用生成器和 yield 关键字是个好主意。
猜你喜欢
  • 2012-02-28
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多