有一个组词的需求,请大家帮忙看下,要求如下:给定一组词,每行一个,如:裤子
牛仔
纯棉
低腰
加肥用上面的词组成下面的格式裤子
牛仔
纯棉
低腰
加肥
裤子牛仔
裤子纯棉
裤子低腰
裤子加肥
裤子牛仔纯棉
裤子牛仔低腰
裤子牛仔加肥
裤子牛仔纯棉低腰
裤子牛仔纯棉加肥
裤子牛仔纯棉低腰加肥
牛仔纯棉
牛仔低腰
牛仔加肥
牛仔纯棉低腰
........这样依次类推一层一层的组词。求一个这个需求的算法思路。

解决方案 »

  1.   

    排列组合,是你要的结果么?$arr=array('裤子','牛仔','纯棉','低腰','加肥');
    for($i=1,$count=count($arr);$i<=$count;$i++)
    $temp[$i]=getCombinationToString($arr,$i);print_r($temp);
    function getCombinationToString($arr,$m){
        $result = array();
        if ($m ==1)
           return $arr;    if ($m == count($arr)){
            $result[] = implode('' , $arr);
            return $result;
        }
            
        $temp_firstelement = $arr[0];
        unset($arr[0]);
        $arr = array_values($arr);
        $temp_list1 = getCombinationToString($arr, ($m-1));
        
        foreach ($temp_list1 as $s){
            $s = $temp_firstelement.$s;
            $result[] = $s; 
        }
        $temp_list2 = getCombinationToString($arr, $m);
        foreach ($temp_list2 as $s){
            $result[] = $s;
        }    
        return $result;
    }/*Array
    (
        [1] => Array
            (
                [0] => 裤子
                [1] => 牛仔
                [2] => 纯棉
                [3] => 低腰
                [4] => 加肥
            )    [2] => Array
            (
                [0] => 裤子牛仔
                [1] => 裤子纯棉
                [2] => 裤子低腰
                [3] => 裤子加肥
                [4] => 牛仔纯棉
                [5] => 牛仔低腰
                [6] => 牛仔加肥
                [7] => 纯棉低腰
                [8] => 纯棉加肥
                [9] => 低腰加肥
            )    [3] => Array
            (
                [0] => 裤子牛仔纯棉
                [1] => 裤子牛仔低腰
                [2] => 裤子牛仔加肥
                [3] => 裤子纯棉低腰
                [4] => 裤子纯棉加肥
                [5] => 裤子低腰加肥
                [6] => 牛仔纯棉低腰
                [7] => 牛仔纯棉加肥
                [8] => 牛仔低腰加肥
                [9] => 纯棉低腰加肥
            )    [4] => Array
            (
                [0] => 裤子牛仔纯棉低腰
                [1] => 裤子牛仔纯棉加肥
                [2] => 裤子牛仔低腰加肥
                [3] => 裤子纯棉低腰加肥
                [4] => 牛仔纯棉低腰加肥
            )    [5] => Array
            (
                [0] => 裤子牛仔纯棉低腰加肥
            ))*/
      

  2.   

    组合问题,可参考/**C(M,N) recursive*/
    function C($m,$n)
    {
            if( $n <= 1) return $m; 
            $rs = array();
            while(count($m))
            {   
                    $first = array_shift( $m );
                    foreach(C($m,$n-1) as $v) $rs[] = $first.$v;
            }   
            return $rs;
    }
    $array = array('裤子','牛仔','纯棉','低腰','加肥');                                                                                         
    while(count($array))
    {
            for($i = 2,$j = count($array);$i <= $j;$i++)
            {   
                    print_r(C($array,$i));
            }   
            array_shift($array);
    }