脚本宝典收集整理的这篇文章主要介绍了php – 如何有效地生成给定长度字母的所有可能字母组合的数组?,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我的目标是创建一个包含最多n个字母的所有可能字符串的数组.说n = 3.
约束:
>字母必须始终按字母顺序排列(abc,而不是CBA;组合,而不是排列)
>字符串必须< = n个字母长(允许算法突破给定长度的任何循环)
>信件不得重复(A,不是AA)
换句话说,如何避免暴力循环通过所有可能的组合并过滤掉那些与上述规则不匹配的组合?
如果我的字母只包含3个字母 – $alphabet = range(‘a’,’c’); – 我希望输出7个项目(3C1 3C2 3C3):[A,B,C,AB,AC,BC,ABC].
如果我的字母只包含4个字母 – $alphabet = range(‘a’,’d’); – 我期望输出15个项目(4C1 4C2 4C3 4C4):[A,D,AD,BD,CD,ABC,ABD,ACD,BCD,ABCD] .但是如果我想限制只有字符串< = 3个字母长,那么我会忽略ABCD,只产生14个项目(4C1 4C2 4C3).
$alphabet = range('a','z'); PRint_r(generate_strings($alphabet,1)); // expected output: A,...Z print_r(generate_strings($alphabet,2)); // exPEcted output: A..Z,AB..AZ,BC..BZ,..YZ print_r(generate_strings($alphabet,3)); // expected output: A..Z,AB..YZ,ABC..XYZ print_r(generate_strings($alphabet,10)); // expected output: A .. JKLMN .. AGKQRZ .. QRSTUVWXYZ // ^ ^ ^10 character max,no repeats // | still alphabetical order // alphabetical order function generate_strings($alphabet,$max_word_length) { // how can I efficiently generate this array // wIThout brute force looping through all of // the invalid and duplicate items like AA and CBA? return $array_of_all_possible_strings; }
function recurse($letters,&$words,$start,$end,$depth,$prefix = "") { $depth--; for ($i = $start; $i < $end; $i++) { $word = $prefix . $letters[$i]; $words[] = $word; if ($depth) recurse($letters,$words,++$start,$word); } } function generate_strings($letters,$max_word_length) { $words = array(); recurse($letters,count($letters),$max_word_length); return $words; }
以上是脚本宝典为你收集整理的php – 如何有效地生成给定长度字母的所有可能字母组合的数组?全部内容,希望文章能够帮你解决php – 如何有效地生成给定长度字母的所有可能字母组合的数组?所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。