假设给你一个数N,你必须找到
以下是我的尝试:
const backtrack = (array, index, result = [], sum) => {
if (index >= array.length || sum < 0) {
return 0;
}
if (sum === 0) {
console.log(result);
return 1;
}
return (
backtrack(array, index, result.concat(array[index]), sum - array[index]) +
backtrack(array, index + 1, result, sum)
);
};
输入
const array = [1, 3, 4];
const index = 0;
const sum = 5;
[ 1, 1, 1, 1, 1 ]
[ 1, 1, 3 ]
[ 1, 4 ]
3
正如您所看到的输出,只有一半的组合数。
[ 1, 3, 1 ]
[ 3,1,1]
[ 4, 1 ]
我可以解释为什么会这样,因为我的右子树是用
backtrack(array, index + 1, result, sum)
查找索引大于当前索引的元素。有没有人能给我一些提示,告诉我为了达到预期的效果我需要做哪些改变?