javascript - 给定一个值,如100,给定一个数组,从数组中挑选出N个元素,这N个元素相加也是100,得到一种结果就行

查看:361
本文介绍了javascript - 给定一个值,如100,给定一个数组,从数组中挑选出N个元素,这N个元素相加也是100,得到一种结果就行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

如数组:

var arr = [99.1, 92.2, 60, 50,
           49.5, 45.7, 25.1, 20, 
           17.4, 13, 10, 7, 2.1, 2, 1];

找到和为100的数组元素:

[60,20,10,7,2,1]

解决方案

function f($n, $arr) { //$n是目标数字,$arr是数字组成的数组
    if (empty($arr)) return false; //如果数组没有元素,返回
    if (in_array($n, $arr)) return [$n];//如果期望的值已经存在,直接返回这个值
    foreach($arr as $k => $v) { //遍历数组
        if ($v > $n) continue; //比指定数还大,过
        $copy = $arr; //复制数组
        unset($copy[$k]); //去掉复制数组中已经被选中的数字
        $next = f($n - $v, $copy); //递归计算
        if(! empty($next)) return array_merge([$v], $next); //合并结果集
    }
    return false;//没找到啊
}
$arr = [99.1, 92.2, 60, 50, 49.5, 45.7, 25.1, 20, 7.4, 13, 10, 7, 2.1, 2, 1];
$data = f(100, $arr);
print_r($data);//Array ( [0] => 60 [1] => 20 [2] => 13 [3] => 7 ) 
$data = f(105, $arr);
print_r($data);//Array ( [0] => 60 [1] => 20 [2] => 13 [3] => 10 [4] => 2 ) 

这篇关于javascript - 给定一个值,如100,给定一个数组,从数组中挑选出N个元素,这N个元素相加也是100,得到一种结果就行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆