题目地址: 链接
思路: 递归回溯
js
/**
* @param {number[]} candidates
* @param {number} target
* @return {number[][]}
*/
var combinationSum = function(candidates, target) {
let n = candidates.length
let ans = [];
const dfs = (idx, sum, arr) => {
if(sum > target) return;
if(sum === target) {
ans.push(arr);
return;
}
for(let i = idx; i < n; i ++) {
dfs(i, sum + candidates[i], [...arr, candidates[i]]);
}
}
dfs(0, 0, []);
return ans;
};