本帖最后由 linlichao2007 于 2012-03-29 21:47:38 编辑

解决方案 »

  1.   

    <?php
    function foo($str){
    $len=strlen($str);
    for($i=0;$i<$len;$i++){
    if($i==0){
    for($j=0;$j<$len-1;$j++){
    $arr[$i][]=substr_replace($str,$str{$j}.'.',$j,1);
    }
    }else{
    for($j=0;$j<$len-1;$j++){
    foreach($arr[$i-1] as $v){
    if(strpos(substr($v,$j,2),'.')===false)
    $arr[$i][]=substr_replace($v,$v{$j}.'.',$j,1);
    $arr[$i]=array_unique($arr[$i]);
    }
    }
    }
    }
    return $arr;
    }
    print_r(@foo('abcdef'));我这代码惨不忍睹,坐等高人
      

  2.   

    其实循环一次就足够啊,非要递归吗,LZ从不结贴吗
    print_r(add_dot("abcd"));
    /***
    把第一个元素弹出即可满足要求
    Array
    (
        [0] => abcd
        [1] => abc.d
        [2] => ab.cd
        [3] => ab.c.d
        [4] => a.bcd
        [5] => a.bc.d
        [6] => a.b.cd
        [7] => a.b.c.d
    )
    /***/
    function add_dot($str, $tmp=""){
    $n = strlen($str);
    if($n<=1){
    $res[] = $tmp.$str;
    if($tmp) $res[] = $tmp.".".$str;
    }
    else{
    $res = add_dot(substr($str,1), $tmp.$str{0});
    if($tmp) $res = array_merge($res, add_dot(substr($str,1), $tmp.".".$str{0}));
    }
    return $res;
    }
      

  3.   

    sdffsfsdfds
    s.fsdfsdf
    s.f.s.d.f.s.d.f
    ...确认你们的答案都ok?还是楼主的题目就没写对?
      

  4.   

    LZ的问题问的。。举例,结果都不一样,我猜是这样吧。
    $str = 'abcdefg';
    function addPoint( $str ,$prefix, $c = array())
    {
    if(strlen( $str ) == 1) return $c;
    for($i=1,$j=strlen($str);$i<$j;$i++)
    {
    $c[] = $prefix.substr($str,0,$i).'.'.substr($str,$i);
    }
    return addPoint(substr($str,1),$prefix.substr($str,0,1).'.',$c);
    }
    echo "<pre/>";
    print_r( addPoint($str,'',array()));