039.组合总和 Combination Sum

Description Medium

定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。

说明:

Example
输入: candidates = [2,3,6,7], target = 7,
所求解集为:
[
  [7],
  [2,2,3]
]

输入: candidates = [2,3,5], target = 8,
所求解集为:
[
  [2,2,2,2],
  [2,3,3],
  [3,5]
]
Solution
func combinationSum(candidates []int, target int) [][]int {
    var rest  [][]int
    for i := 0;i < len(candidates);i ++ {
        if target - candidates[i] > 0{
            for _,rst_ := range combinationSum(candidates[i:],target-candidates[i]) {
                tmp := make([]int,len(rst_)+1)
                copy(tmp,rst_)
                tmp[len(rst_)] = candidates[i]
                rest = append(rest,tmp)
            }
        }else if target - candidates[i] == 0{
            rest = append(rest,[]int{candidates[i]})
        }
    }
    return rest
}

leetCode地址