我希望创建一个函数,该函数将返回给定字符串长度内的每个可能的字符串,使用字符集。
作为一个例子,字符集"abc"和长度为2应该允许9(3 ^ 2)个唯一的组合:
aa,ab,交流,英国航空公司bb,公元前钙、cb,cc
(手动构造的列表)
可以使用什么方法来创建这样的函数?
一如既往,有多种方法可以解决您所要求的问题,这只是一种方法,在输出字符串中每个字符使用一个计数器:
$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
一个主循环,一个用于构建字符串的循环和一个用于计数的循环。
我可以想象这应该与每个输出字符串位置的模量一起工作。您已经做了这样做,从您的示例解决方案中我们可以清楚地看到:
aa、ab、ac、ba、bb、bc、ca、cb、cc
你是怎么想出这个解决方案的?你必须记住一些事情:
-
我应该从字符集开始的字符是什么?
-
当我正在构建输出字符串时,下一个字符是什么?
-
我可以从字符集中选择多少字符?
-
当我从字符集中选择了我允许的所有字符时,我必须做什么?
-
我已经耗尽了字符集相对于字符我可以开始吗?
你能把这个翻译成代码吗?还是这个回答太做作了?