回溯:先排序,后回溯,注意剪掉已经使用过的元素
去重:如果前一个元素与当前元素相同,那么没有必要再用当前元素进行后续的回溯
function combinationSum2( num , target ) {
if (!num.length) return []
num.sort((a, b) => a - b)
let result = []
function dfs(path, sum, ind) {
if (sum === target) return result.push([...path])
else if(sum > target) return
for(let i = ind; i < num.length; i ++) {
if (i > ind && num[i] === num[i - 1]) continue
path.push(num[i])
dfs(path, sum + num[i], i + 1)
path.pop()
}
}
dfs([], 0, 0)
return result
} 
京公网安备 11010502036488号