一個整形一維數組,以及一個目標數,寫一個方法,求出數組任意兩個元素之和爲該目標值的全部組合。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);