Link:https://leetcode.com/problems/combination-sum/
/** * @param {number[]} candidates * @param {number} target * @return {number[][]} */var combinationSum = function(candidates, target) { let rst = [], local = []; backtrack(rst, local, candidates, target); return rst;};function backtrack(rst, local, candidates, target) { if(equal(local, target) && !judgeArrEqual(rst, local)) rst.push(local); else { for(let i=0; i<candidates.length; i++) { local.push(candidates[i]); let nextLocal = local.slice(0); if(constraint(local, target)) { backtrack(rst, nextLocal, candidates, target); } local.pop(); } }}function judgeArrEqual(arr, arr2) { let ar2 = arr2.slice(0).sort(); return arr.some(ele => { let ar1 = ele.slice(0).sort(); if(ar1.toString() === ar2.toString()) return true; });}function equal(arr, target) { let sum =0; if(arr.length !== 0) { sum = arr.reduce((acc, cur) => (acc+cur)); } if(sum === target) return true; else return false;}function constraint(arr, target) { let sum =0; if(arr.length !== 0) { sum = arr.reduce((acc, cur) => (acc+cur)); } if(sum > target) return false; else return true;}