我正在寻找创建一个函数,它将使用字符集返回给定字符串长度内的每个可能的字符串。
例如,“abc”的字符集和2的长度应允许9(3 ^ 2)个唯一组合:
AA, AB, AC, BA, BB, 公元前, CA, CB, CC
(手动构建列表)
可以使用什么方法来创建这样的函数?
答案 0 :(得分:2)
您已经 进行此操作,我们可以从您的示例解决方案中清楚地看到:
aa,ab,ac,ba,bb,bc,ca,cb,cc
你在脑子里做了什么来提出这个解决方案?你必须记住一些事情:
我应该从charset开始使用什么字符?
当我构建输出字符串时,来自charset的 next 字符是什么?
我可以从charset中挑选多少个字符?
当我从charset中挑选出我允许的所有字符时,我该怎么办?
关于我可以开始的字符我是否已经筋疲力尽了?如果是的话,我已经完成了。
你能把它翻译成代码吗?或者这个答案太可爱了?
答案 1 :(得分:2)
与往常一样,有多种方法可以解决您的要求,这只是一种方法,在输出字符串中每个字符使用一个计数器:
$c = "abc"; // charset
$l = 2; // string length
for($t='',$cl=strlen($c),$s=array_fill(0,$l,0),$i=pow($cl,$l);$a=0,$i--;) {
for($t&&$t.=', ';$a<$l;$t.=$c[$s[$a++]]);
for(;$a--&&++$s[$a]==$cl;$s[$a]=0);
};
echo $t; // the string you asked for.
aa,ab,ac,ba,bb,bc,ca,cb,cc
一个主循环,一个用于构建字符串的循环和一个用于计数的循环。
我可以想象这应该与输出字符串的每个位置获得模数一起工作。