CombinationSumII
Published at 2022-03-20
/**
* @param {number[]} candidates
* @param {number} target
* @return {number[][]}
*/
var combinationSum2 = function(candidates, target) {
const func=(sums, can, curr, res)=>{
let i = 0;
while(i<can.length){
const tempSum = sums + can[i];
if(tempSum == target){
res.push([...curr, can[i]]);
}else if(tempSum < target){
func(tempSum, can.slice(i+1, can.length), [...curr, can[i]], res);
}
while(i+1<can.length && can[i] == can[i+1]) i++; // 중복 제거 위해
i++;
}
return res;
}
candidates.sort(); // 중복 제거 위해
return func(0, candidates, [], []);
};
/* combination Sum 에서 중복제거가 추가된 문제인데
중복 제거 위해 candidates를 정렬 한 후
while문을 돌 때 다음번 요소랑 같으면 i를 계속 증가시킴.
*/