如何在php中找到给定数字的所有可能的字母组合 我需要一个高效的PHP代码,为给定的数字生成所有可能的字母组合。为数字分配字母,如2->ABC 3->DEF 4->GHI 5->JKL 6->MNO 7->PQRS 8->TUV 9->WXYZ我已经尝试了下面的代码,但它没有给出预期的输出。

如何在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

如果我将输入作为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。。等等

时间复杂度应该更低,代码效率也更高


这应该行得通

所以…不管你做什么,复杂性都会增加!。第二,这些数字是从哪里来的:你说的是一个直接向上的数组吗?你所做的将是内在的缓慢。找到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);
            }
        }
    }