例如给定['a', 'b']
(作为生成器)和 2 作为长度
该函数将输出一个生成器,该生成器将产生:
'',
'a',
'b',
'ab'
'ba'
'aa'
'bb'
或给定['a']
长度为 3:
'',
'a',
'aa',
'aaa',
正如您可以想象的那样,如果添加更多字母或增加长度,该集合会变得更大,它应该列出给定字符的所有排列,直到长度
这是一个相当不言自明的解决方案。
//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 given 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);.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)