使用php查找其和等于给定目标的数组的子集
我正在尝试实现以下功能: 例如:使用php查找其和等于给定目标的数组的子集,php,Php,我正在尝试实现以下功能: 例如: $a=array(1,10,25,50); $number=15; o/p : 15=1+1+1+1+1+10; 完成: 为此创建一个递归函数: function getcomb($arr,$actualNum, $total=0, $combination_array = array()){ foreach($arr as $k=>$v){ if($v > $actualNum) continue;
$a=array(1,10,25,50);
$number=15;
o/p : 15=1+1+1+1+1+10;
完成:
为此创建一个递归函数:
function getcomb($arr,$actualNum, $total=0, $combination_array = array()){
foreach($arr as $k=>$v){
if($v > $actualNum) continue;
$shiftVal = $v;
if($total+$shiftVal <= $actualNum ){
$combination_array[] = $shiftVal;
$total += $shiftVal;
$reminder = $actualNum-$total;
//echo "<pre>combination_array";print_r($combination_array);
if($reminder <= 0){
return $shiftVal;
}else{
return $shiftVal .' + '.getcomb($arr, $actualNum,$total, $combination_array);
}
}
}
}
$a=array(1,10,25,50);
rsort($a);
$number=15;
echo $str = getcomb($a, $number);
函数getcomb($arr,$actualNum,$total=0,$combination\u array=array()){
foreach($arr as$k=>$v){
如果($v>$actualNum)继续;
$shiftVal=$v;
如果($total+$shiftVal)不像看上去那么简单,我们可以通过递归来实现它?这是一个硬币兑换问题吗?您想要达到数字的最有效方法(使用最少的加法)?还是任意组合?
$a=array(1,10,25,50);
rsort($a);
$number=15;
echo $number . " = ";
$final = [];
foreach($a as $num) {
if((int)($number / $num) > 0) {
$final = array_merge($final, array_fill(0, (int)($number / $num), $num));
$number -= (int)($number / $num) * $num;
}
}
echo implode(' + ', $final);
function getcomb($arr,$actualNum, $total=0, $combination_array = array()){
foreach($arr as $k=>$v){
if($v > $actualNum) continue;
$shiftVal = $v;
if($total+$shiftVal <= $actualNum ){
$combination_array[] = $shiftVal;
$total += $shiftVal;
$reminder = $actualNum-$total;
//echo "<pre>combination_array";print_r($combination_array);
if($reminder <= 0){
return $shiftVal;
}else{
return $shiftVal .' + '.getcomb($arr, $actualNum,$total, $combination_array);
}
}
}
}
$a=array(1,10,25,50);
rsort($a);
$number=15;
echo $str = getcomb($a, $number);