【发布时间】:2021-11-14 05:58:38
【问题描述】:
我正在解决LeetCode #49 Combination Sum。我们的想法是找到总和为目标的所有唯一组合。
找到添加到总和的排列是相当简单的,但我正在努力修改我的代码以只找到唯一的排列。
动态规划中通过递归获得唯一结果的一般概念是什么?
/**
* @param {number[]} candidates
* @param {number} target
* @return {number[][]}
*/
var combinationSum = function (candidates, target) {
let distinct = []
let dfs = (candidates, target, list = []) => {
if (target === 0) {
distinct.push(list)
return
}
candidates.forEach((candidate, i) => {
let diff = target - candidate;
if (diff >= 0) {
dfs(candidates, diff, [...list, candidate])
}
})
}
dfs(candidates, target)
return distinct
};
输入:
[2,3,6,7]
7
我的输出:
[[2,2,3],[2,3,2],[3,2,2],[7]]
期望的输出:
[[2,2,3],[7]]
如何避免重复?
【问题讨论】:
标签: javascript recursion dynamic-programming