给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
    candidates 中的每个数字在每个组合中只能使用一次。

    说明:

    所有数字(包括目标数)都是正整数。
    解集不能包含重复的组合。
    示例 1:

    输入: candidates = [10,1,2,7,6,1,5], target = 8,
    所求解集为:
    [
    [1, 7],
    [1, 2, 5],
    [2, 6],
    [1, 1, 6]
    ]
    示例 2:

    输入: candidates = [2,5,2,1,2], target = 5,
    所求解集为:
    [
    [1,2,2],
    [5]
    ]

    1. function getSum(arr) {
    2. return arr.length === 0 ? 0 : arr.reduce((a, b) => a + b)
    3. }
    4. var combinationSum2 = function (candidates, target) {
    5. var res = []
    6. var sortCandidates = candidates.sort((a,b)=>a-b)
    7. function backtracking(path,start) {
    8. const sum = getSum(path)
    9. if (sum > target) return
    10. if (sum === target) {
    11. res.push([...path])
    12. return
    13. }
    14. for (let i = start; i < sortCandidates.length; i++) {
    15. if (i - 1 >= start && sortCandidates[i - 1] == sortCandidates[i]) { // 当前选项和左邻选项一样,跳过
    16. continue;
    17. }
    18. const element = sortCandidates[i];
    19. path.push(element)
    20. backtracking(path,i+1)
    21. path.pop()
    22. }
    23. }
    24. backtracking([],0)
    25. return res
    26. };