https://leetcode.com/problems/combination-sum-ii/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
* @param {number[]} candidates
* @param {number} target
* @return {number[][]}
*/
const combinationSum2 = function(candidates, target) {
candidates.sort()
let res = []

const backtrack = function(nums, remain, tmp = [], i = 0) {
if (remain < 0) {
return
}
if (remain === 0) {
return res.push([...tmp])
}
for (; i < nums.length; i++) {
tmp.push(nums[i])
backtrack(nums, remain - nums[i], tmp, i + 1) // next item
tmp.pop()
}
}
backtrack(candidates, target)

/* unique object array */
res = [...new Set(res.map(v => JSON.stringify(v)))].map(v => JSON.parse(v))
return res
}