GoLang刷题之leetcode

题目39:组合总和

题目描述:

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。

candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。

对于给定的输入,保证和为 target 的不同组合数少于 150 个。

题解:

func combinationSum(candidates []int, target int) [][]int {
    res, r := [][]int{}, []int{}
    sort.Ints(candidates)
    if len(candidates)==0{
        return res
    }
    helper(candidates,target,0, r, &res)
    return res
}
func helper(candidates []int, target int, s int, r []int, res *[][]int){
    if target<0{
        return
    }
    if target==0{
        c := make([]int, len(r))
        copy(c,r)
        *res = append(*res, c)
        return
    }
    for i:= s;i<len(candidates);i++{
        r = append(r, candidates[i])
        helper(candidates, target-candidates[i], i, r, res)
        r = r[:len(r)-1]
    }
}

你可能感兴趣的:(leetcode,算法,数据结构)