Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 组合和编码挑战_Javascript_Algorithm - Fatal编程技术网

Javascript 组合和编码挑战

Javascript 组合和编码挑战,javascript,algorithm,Javascript,Algorithm,我试图解决一个编码挑战“组合求和”(composition Sum)),并找到了一个解决方案,但我不明白为什么currArr.pop()内部需要(target>=候选者[I])。我试着去理解它,把它取下来,然后把它放回原处,但还是弄不明白。有人能解释一下为什么这对我来说是必要的吗?谢谢 var combinationSum=函数(候选,目标){ 排序((a,b)=>a-b); 常量结果=[]; const innerFunction=(当前、目标、索引)=>{ 如果(目标===0){ 结果:推

我试图解决一个编码挑战“组合求和”(composition Sum)),并找到了一个解决方案,但我不明白为什么
currArr.pop()
内部
需要(target>=候选者[I])
。我试着去理解它,把它取下来,然后把它放回原处,但还是弄不明白。有人能解释一下为什么这对我来说是必要的吗?谢谢

var combinationSum=函数(候选,目标){
排序((a,b)=>a-b);
常量结果=[];
const innerFunction=(当前、目标、索引)=>{
如果(目标===0){
结果:推(currArr.slice());
返回;
}
for(设i=index;i=候选人[i]){
const newTarget=目标-候选[i];
当前推送(候选人[i]);
内部功能(currArr,newTarget,i);
currArr.pop();
}否则{
返回;
}
}
}
内部函数([],目标,0);
返回结果;
};

日志(组合总和([2,3,6,7],7))这种技术称为回溯。 回溯是一种用于逐步建立问题解决方案的技术。这些“部分解决方案”可以用一系列决策来表述。一旦确定“部分解决方案”不可行(即,没有后续决策可以将其转换为解决方案),则回溯算法将其步骤追溯到最后一个可行的“部分解决方案”,并重试

这里的关键点是,在currar.push(候选者[i])之后,流是递归调用innerFunction(currar,newTarget,i);所以currArr在不断增长,如果(target==0)找到了所需的结果,并且您使用currArr.slice()对currArr进行了深度复制,现在使用return,代码返回到currArr.pop(),因为这是在内部函数递归调用之后


我希望这能帮助你-

在阅读了你的评论并研究了回溯之后,现在一切都变得有意义了。你救了我一天!我真的很感激你,很高兴我帮了你