for i inrange(start, len(candidates)): if s + candidates[i] > target: return temp.append(candidates[i]) backtracking(i, temp, s + candidates[i]) temp.pop() candidates.sort() backtracking(0, [], 0) return answer
voidbacktracking(vector<int> &candidates, int target, int start, int sum, vector<int> temp, vector<vector<int>> &answer){ if (sum == target) { answer.push_back(temp); return; } for (int i = start; i < candidates.size(); ++i) { if (sum + candidates[i] > target) return; temp.push_back(candidates[i]); backtracking(candidates, target, i, sum + candidates[i], temp, answer); temp.pop_back(); } } };
Go
func combinationSum(candidates []int, target int) [][]int {
answer := make([][]int, 0, 0)
sort.Ints(candidates)
backtracking(candidates, target, 0, make([]int, 0, 0), 0, &answer)
return answer
}
func backtracking(candidates []int, target int, start int, temp []int, sum int, answer *[][]int) {
if sum == target {
t := make([]int, len(temp))
copy(t, temp)
*answer = append(*answer, t)
return
}
for i := start; i < len(candidates); i++ {
if sum + candidates[i] > target {return}
temp = append(temp, candidates[i])
backtracking(candidates, target, i, temp, sum + candidates[i], answer)
temp = temp[:len(temp) - 1]
}
}