Combination Sum
MediumArrayBacktracking
Solution
export function combinationSum(candidates: number[], target: number): number[][] {
candidates.sort((a, b) => a - b);
const result: number[][] = [];
const dfs = (path: number[], sum: number, lastCandidate: number) => {
if (sum === target) {
result.push([...path]);
return;
}
for (let i = lastCandidate; i < candidates.length; i++) {
const candidate = candidates[i];
if (sum + candidate <= target) {
path.push(candidate);
dfs(path, sum + candidate, i);
path.pop();
}
}
};
dfs([], 0, 0);
return result;
}