39.go 947 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package main
  2. import (
  3. "sort"
  4. )
  5. func combinationSumIter(candidates []int, target int, beg int, last []int, res *[][]int) {
  6. if target == 0 {
  7. *res = append(*res, last)
  8. }
  9. for i := beg; i < len(candidates) && candidates[i] <= target; i++ {
  10. // if don't copy solution, iteration'll fail
  11. // go slice is just like a ptr
  12. solution := make([]int, len(last))
  13. copy(solution, last)
  14. solution = append(solution, candidates[i])
  15. combinationSumIter(candidates, target-candidates[i], i, solution, res)
  16. }
  17. }
  18. func combinationSum(candidates []int, target int) [][]int {
  19. res := make([][]int, 0)
  20. sort.Ints(candidates)
  21. combinationSumIter(candidates, target, 0, []int{}, &res)
  22. return res
  23. }
  24. /* func main() {
  25. a1 := []int{2, 3, 6, 7}
  26. fmt.Println(combinationSum(a1, 7))
  27. a2 := []int{1, 2}
  28. fmt.Println(combinationSum(a2, 4))
  29. a3 := []int{8, 7, 4, 3}
  30. fmt.Println(combinationSum(a3, 11))
  31. a4 := []int{7, 3, 2}
  32. fmt.Println(combinationSum(a4, 18))
  33. } */