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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* @param {number[]} candidates
* @param {number} target
* @return {number[][]}
*/
const combinationSum = 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]) // Notice: [...tmp] is important
}
for (let len = nums.length; i < len; i++) {
tmp.push(nums[i])
backtrack(nums, remain - nums[i], tmp, i)
tmp.pop()
}
}
backtrack(candidates, target)
return res
}