var combinationSum2 = function (candidates, target) {
candidates.sort()
const len = candidates.length
let list = []
backtrack([], 0, 0)
return list
function backtrack(temp, cur, sum) {
if (sum > target) return
if (sum === target) {
list.push([...temp])
}
for (let i = cur; i < len; i++) {
// 剪枝,后续相同元素不需要排序,避免重复
if(cur <= i -1 && candidates[i] === candidates[i - 1]) continue
temp.push(candidates[i])
sum += candidates[i]
backtrack(temp, i + 1, sum)
sum -= candidates[i]
temp.pop()
}
}
};