组合总和 II"/>
LeetCode讲解篇之40. 组合总和 II
文章目录
- 题目描述
- 题解思路
- 题解代码
题目描述
题解思路
按升序排序candidates,然后遍历candidates,目标数减去当前candidates的数,若该结果小于0,因为candidates的元素大于0,所以后续不会再出现让计算结果等于0的情况,所以直接break,如果该结果等于0,将数据加到结果集合中,然后break,若该结果大于0,则将当前candidates的数加入tmp数组,递归调用,调用结束后,删去tmp中添加的当前candidates的数,然后去掉和当前candidates的数重复的数
题解代码
func combinationSum2(candidates []int, target int) [][]int {sort.Ints(candidates)res := make([][]int, 0)var dfs func([]int, int)tmp := []int{}dfs = func(candidates []int, target int) {n := len(candidates)for i := 0; i < n; i++ {temp := target - candidates[i]if temp < 0 {break}if temp == 0 {res = append(res, append([]int{}, append(tmp, candidates[i])...))break}tmp = append(tmp, candidates[i])dfs(candidates[i+1:], temp)tmp = tmp[:len(tmp)-1]for i < n - 1 && candidates[i] == candidates[i+1] {i++}}}dfs(candidates, target)return res
}
更多推荐
LeetCode讲解篇之40. 组合总和 II
发布评论