网上的,N个数相加之和等于固定数,只能打印,结果怎么才能返回值?

666_666 2020-09-25 10:52:46
$_arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

function getSetBySum($_array, $_sum, $_index, $_current, $_return=''){

for($i = $_index; $i < count($_array); $i++){
if($_current-$_array[$i] == 0 && $_sum-$_array[$i] ==0){ //找到一个
$_return .= $_array[$i].'<br/>';
echo $_return;
}else if($_current-$_array[$i] > 0 ){ //继续找
$_return .= $_array[$i].',';
$_sum -= $_array[$i];
for( $j = $i+1; $j<count($_array); $j++){
getSetBySum($_array,$_sum,$j,$_current-$_array[$i],$_return);
}
}
}
}
for($t = 0; $t < count($_arr); $t++){
getSetBySum($_arr,20,$t, 20);
}
...全文
2318 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
下雨的声音丶 2020-10-29
  • 打赏
  • 举报
回复
引用 2 楼 destiny_good 的回复:
用了另一个方法,也感谢
能分享出来学习学习吗?
666_666 2020-09-29
  • 打赏
  • 举报
回复
用了另一个方法,也感谢
下雨的声音丶 2020-09-25
  • 打赏
  • 举报
回复


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(0,1, 2, 3, 4,5);
$data = getSumNum($_arr, 8);
array_map(function ($v){
    var_dump(implode(',', $v));
}, $data);
执行结果 string(7) "0,1,2,5" string(7) "0,1,3,4" string(5) "0,3,5" string(5) "1,2,5" string(5) "1,3,4" string(3) "3,5" 是要这个结果吗? 随便写的,不一定正确。要使用请验证

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧