提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
使用:
//工作中使用的
function findCombinationkeys($numbers, $targetSum, $currentSum, $startIndex, $combination, $startTime) {
// 设置最大执行时间为5秒钟
$maxExecutionTime = 5;
if ($currentSum == $targetSum) {
$keys = array_keys($combination);
return $keys;
}
$numberKeys = array_keys($numbers);
for ($i = $startIndex; $i < count($numberKeys); $i++) {
$key = $numberKeys[$i];
$value = $numbers[$key];
$newSum = $currentSum + $value;
if ($newSum <= $targetSum) {
$newCombination = $combination;
$newCombination[$key] = $value;
$ret = findCombinationkeys($numbers, $targetSum, $newSum, $i + 1, $newCombination, $startTime);
if($ret) {
return $ret;
}
}
// 检查是否超时
$currentTime = microtime(true);
if ($currentTime - $startTime >= $maxExecutionTime) {
return false;
}
}
return false;
}
2:
//测试通过
public function findSum($nums, $target, $current = [], $startIndex = 0, $combinationIndex = 0)
{
if (array_sum($current) == $target) {
// 当找到一个组合时,打印它的索引
echo "Combination " . ($combinationIndex + 1) . ": ";
print_r($current);
return;
}
for ($i = $startIndex; $i < count($nums); $i++) {
$current[$i] = $nums[$i];
// 递归调用,增加组合索引
$this->findSum($nums, $target, $current, $i + 1, $combinationIndex + 1);
array_pop($current);
}
}
public function test() {
$nums = [1, 2, 3, 4, 5, 8, 9,20,30,40,90];
$target = 100;
$this->findSum($nums,$target,[],0, 0);
}