/**
* @param {number[]} candidates
* @param {number} target
* @return {number[][]}
*/
var combinationSum = function (candidates, target) {
const res = [];
const ope = (cur, start, sum) => {
// 如果 sum 大于等于 target ,结束本次递归,如果 sum === target ,将结果保存到 res 中
if (sum >= target) {
if (sum === target) {
res.push(cur);
}
return;
}
// start 记录下一个查找数字不会与上一次查找的结果重复
for (let i = start; i < candidates.length; i++) {
cur.push(candidates[i]);
ope(cur.slice(), i, sum + candidates[i]);
// 需要清除本次递归调用的结果,不然下一次的结果会保留本次的结果
cur.pop();
}
};
ope([], 0, 0);
return res;
};