1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| package main
import "sort"
func combinationSum(candidates []int, target int) [][]int { sort.Ints(candidates) var result [][]int var backtrack func(int, int, []int)
backtrack = func(start, currentSum int, path []int) { for i := start; i < len(candidates); i++ { num := candidates[i] newSum := currentSum + num
if newSum > target { break } else if newSum == target { temp := make([]int, len(path)) copy(temp, path) temp = append(temp, num) result = append(result, temp) break } else { backtrack(i, newSum, append(path, num)) } } }
backtrack(0, 0, []int{}) return result }
|