如何在php中找到给定数字的所有可能的字母组合 我需要一个高效的PHP代码,为给定的数字生成所有可能的字母组合。为数字分配字母,如2->ABC 3->DEF 4->GHI 5->JKL 6->MNO 7->PQRS 8->TUV 9->WXYZ我已经尝试了下面的代码,但它没有给出预期的输出。
如果我将输入作为628,它应该从“MNOABCTUV”生成所有可能的字符组合 输出应生成 -2字母组合 -三字母组合 -4字母组合 -5字母组合 -6字母组合 我需要三个字母单词的所有组合 [0]=>UBM [1] =>OTV [2] =>NAU [3] =>OMA [4] =>BUA [5] =>VCM [6] =>AVT [7] =>AOM [8] =>NTV [9] =>VMB [10] =>美国之音 [11] =>非统组织 [12] =>VBU [13] =>MNV [14] =>AMO [15] =>OVC [16] =>曹 [17] =>UTN [18] =>TVN [19] =>TVC [20] =>BNO [21]=>货车 [22]=>CBV [23]=>VTN。。等等 时间复杂度应该更低,代码效率也更高如何在php中找到给定数字的所有可能的字母组合 我需要一个高效的PHP代码,为给定的数字生成所有可能的字母组合。为数字分配字母,如2->ABC 3->DEF 4->GHI 5->JKL 6->MNO 7->PQRS 8->TUV 9->WXYZ我已经尝试了下面的代码,但它没有给出预期的输出。,php,combinations,Php,Combinations,如果我将输入作为628,它应该从“MNOABCTUV”生成所有可能的字符组合 输出应生成 -2字母组合 -三字母组合 -4字母组合 -5字母组合 -6字母组合 我需要三个字母单词的所有组合 [0]=>UBM [1] =>OTV [2] =>NAU [3] =>OMA [4] =>BUA [5] =>VCM [6] =>AVT [7] =>AOM [8] =>NTV [9] =>VMB [10] =>美国之音 [11] =>非统组织 [12] =>VBU [13] =>MNV [14] =>AMO
这应该行得通 所以…不管你做什么,复杂性都会增加!。第二,这些数字是从哪里来的:你说的是一个直接向上的数组吗?你所做的将是内在的缓慢。找到2个字母的所有组合在最佳情况下需要26^2 676个操作。10封信需要26^10141167095653376次操作。我不知道你为什么要这么做,但我很怀疑你有什么理由值得这么做。把这些值存储在二维数组中。数组2=>'ABC',3=>'DEF',4=>'GHI',5=>'JKL',6=>'MNO',7=>'PQRS',8=>'TUV',9=>'WXYZ';
function f_($n)
{
if($n<2) { return 1; }
for($x = 2;$n-1>1;$x*=$n--);
return $x;
}
function array_restore($r){
$clean = array();
if(is_array($r)){
foreach($r as $k){
$clean[] = $k;
}
}
return $clean;
}
function cmb($val, $l, $u=false){
$len = $l;
$str = strlen($val);
$tot = f_($str) / f_($str-$len);
$combo = array();
if($l <= $str){
for($i=0;$i<$tot*8;$i++){
if(substr(str_shuffle($val), 0, $len) !== @$combo[$i]){
$combo[$i] = substr(str_shuffle($val), 0, $len);
}
}
}else{
return "length must be less than the length of your string.";
}
if($u == true){
$x = array_unique($combo);
return array_restore($x);
}else{
return $combo;
}
}
$res = cmb($value, 3, true);
echo "<pre><br/>";
print_r($res);
Requirements:
$arr = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
$newOne = array();
$c = count($arr); //count for your lang letters..
for($i = 0;$i<$c;$i++){
for($j = 0;$j<$c;$j++){
for($k = 0;$k<$c;$k++){
$val = $arr[$i].$arr[$j].$arr[$k];
array_push($newOne,$val);
}
}
}