例如
一组数[1,2,3,4,5,6,7,9,10]
计算所有相加值等于12的所有组合
3,9
2,10
2,3,5
6,4,2
1,2,3,6
1,2,4,5

解决方案 »

  1.   

    $arr = [1,2,3,4,5,6,7,8,9,10];
    $sum = 12;
    $len = count($arr);
    $data = [];
    function s($arr,&$data=[],$i=0,$length=0){
        $len = count($data);
        for($j=$length;$j<$len;$j++){
            foreach($arr as $k=>$v){
                if($k+$i+1<count($arr)){
                    $str = $arr[$k+$i+1];
                    $sa = explode(',',$data[$j]);
                    foreach($sa as $item){
                        if($item > $str){
                            continue 2;
                        }
                    }
                    if(in_array($str,$sa)){
                        continue;
                    }else{
                        if(implode(",",$sa) == ""){
                            continue;
                        }else{
                            $s = implode(",",$sa).",".$str;
                            $data[] = $s;
                        }
                    }
                }else{
                    break;
                }
            }
        }    $i++;
        if($i>count($arr)){
            return $data;
        }else{
            return s($arr,array_unique($data),$i,$len);
        }
    }
    echo "<pre >";
    $data = s($arr,$arr);
    //帅选满足条件的数组
    function gf($data,$sum)
    {
        echo count($data)."--c<br />";
        $newData = [];
        foreach($data as $k=>$v){
            $a = explode(",",$v);
            $sums = array_sum($a);
            //echo $sums."<br />";
            if($sums == $sum){
                $newData[] = $v;
            }else{
                continue;
            }
        }
        return $newData;
    }
    echo "<pre >";
    $datas = gf($data,$sum);
    var_dump($datas);自己组装成一个函数吧 这是考验 最难的都解决了