1. var combinationSum = function(candidates, target) {
    2. const list = [],
    3. temp = []
    4. // 通过排序,比较大小实现剪枝,排除不必要的遍历
    5. candidates.sort()
    6. backtrack(0, 0)
    7. return list
    8. function backtrack(index, sum) {
    9. if(sum > target) {
    10. return
    11. }
    12. if (sum === target) {
    13. list.push([...temp])
    14. }
    15. // 从上一次的位置开始,避免重复结果
    16. for(let i = index; i < candidates.length;i++) {
    17. let num = candidates[i]
    18. // 剪枝,排除不必要的遍历
    19. if((num + sum) > target) {
    20. continue
    21. }
    22. temp.push(num)
    23. sum += num
    24. backtrack(i, sum)
    25. temp.pop()
    26. sum -= num
    27. }
    28. }
    29. };