【发布时间】:2018-10-31 19:03:39
【问题描述】:
我试图使用回溯解决以下问题:
假设给你一个数字 N,你必须找到 将其写为 1、3 和 4 之和的不同方式。
这是我的尝试:
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) 构造的
它查找索引大于当前索引的元素。任何人都可以给我提示我需要进行哪些更改以实现所需的输出?
【问题讨论】:
标签: javascript backtracking subset-sum recursive-backtracking