算法 : 一個整形一維數組,以及一個目標數,寫一個方法,求出數組元素之和爲該目標值的全部組合。

一個整形一維數組,以及一個目標數,寫一個方法,求出數組任意兩個元素之和爲該目標值的全部組合。json

function meetGroup($array, $hit)
{
    $meet_groups =[];
    foreach ($array as $k => $value) {
        foreach (array_slice($array,$k +1) as $nval){
            if($value + $nval == $hit) {
                $meet_groups[] = [$value, $nval];
            }elseif($value + $nval > $hit){
                break;
            }
        }
    }
    return $meet_groups;
}

一個整形一維數組,以及一個目標數,寫一個方法,求出數組元素之和爲該目標值的全部組合。數組

function meetGroup2($array, $current_array,$hit)
{
    $result = [];
    foreach ($array as $k => $value) {

        if (array_sum($current_array) + $value == $hit) {
            $d= array_merge($current_array, [$value]);
            if($d && !in_array(implode(',',$d),$result))  $result[]=implode(',',$d);
            break;
        }
        if (array_sum($current_array) + $value > $hit) {
            break;
        }
        $next = array_merge($current_array,[$value]);
        foreach (array_slice($array,$k +1) as $kn=>$nval){
            echo json_encode($next).$nval.PHP_EOL;
            if (array_sum($next)  + $nval == $hit) {
                $d = array_merge($next, [$nval]);
                if($d && !in_array(implode(',',$d),$result))  $result[]=implode(',',$d);
                break;
            }else if(array_sum($next) + $nval > $hit){
                break;
            }else{
                $d=meetGroup2(array_slice($array,$k +$kn+1), $next,$hit);
                $result=array_unique(array_merge($result,$d));

            }
        }
    }
    return $result;
}
$groups = meetGroup2([1, 2, 3, 5, 6, 7,8,10,12,15,16,20], [],10);
print_r($groups);

相關文章
相關標籤/搜索