/**
* 获取匹配数字
*
* @param Integer[] $nums
* @param Integer $target
* @return Integer[]|null
*/
protected function getMatch(array $nums,int $target) :?array
{
//定义映射集
$map=[];
//遍历源数组
foreach ($nums as $index=>$val){
//差值
$complement=$target-$val;
//对比映射集 取差合值
if(array_key_exists($complement,$map))return [$map[$complement],$index];
//单元素相等直接返回
if ($val==$target)return [$index];
$map[$val]=$index;
//当前值小于目标值时 递归取双值集
if ($val<$target){
$temp = $nums;
unset($temp[$index]);
$arr = $this->getMatch($temp,$target-$val);
if ($arr) {
$arr[] = $index;
return $arr;
}
}
}
return null;
}
通过递归一次O(N)的查两数和值来增量添加目标返回
非线性匹配,匹配结果取决于数组值顺序
可多次遍历源数组来增量的匹配:使得结果集逐步寻找 单元素符合…双元素之和…三元素之和…