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