var combinationSum = function(candidates, target) {
const list = [],
temp = []
// 通过排序,比较大小实现剪枝,排除不必要的遍历
candidates.sort()
backtrack(0, 0)
return list
function backtrack(index, sum) {
if(sum > target) {
return
}
if (sum === target) {
list.push([...temp])
}
// 从上一次的位置开始,避免重复结果
for(let i = index; i < candidates.length;i++) {
let num = candidates[i]
// 剪枝,排除不必要的遍历
if((num + sum) > target) {
continue
}
temp.push(num)
sum += num
backtrack(i, sum)
temp.pop()
sum -= num
}
}
};