21,882
社区成员
发帖
与我相关
我的任务
分享
function getSumNum($arr , $total)
{
sort($arr);
$result = [];
while (($value = array_shift($arr)) !== null){
if ($value < $total) {
$res = getSumNum($arr, $total - $value);
if ($res) {
$res = array_map(function ($v) use ($value){
array_unshift($v, $value);
return $v;
}, $res);
$result = array_merge($result, $res);
}
} elseif ($value == $total) {
$result[] = [$value];
} else {
break;
}
}
return $result;
}
$_arr = array(5, 8, 20, 35, 41, 2, 15, 10, 9);
$data = getSumNum($_arr, 50);
array_map(function ($v){
var_dump(implode(',', $v));
}, $data);
结果:
string(11) "2,5,8,15,20"
string(8) "2,5,8,35"
string(10) "5,10,15,20"
string(7) "5,10,35"
string(4) "9,41"
string(5) "15,35"
肯定不是最优的。有最优的还请分享一下