前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LC 39. 组合总和(回溯)

LC 39. 组合总和(回溯)

作者头像
SakuraTears
发布2022-01-13 15:13:25
2270
发布2022-01-13 15:13:25
举报
文章被收录于专栏:从零开始的Code生活

题目

思路

这题可以直接用DFS暴力搜也可以过。

可以采用回溯 + 剪枝缩短一下时间 对于[2, 3, 6 ,7] 可以让target减去每个数,然后依次减下去得到0这条路径就是一个答案。

但是这样会产生四个正确的路径,因为有三个重复的,产生重复的原因为在别的路径中重复使用了之前使用过的路径,所以在后面的路径中不再使用前面的数即可解决重复的问题

代码语言:javascript
复制
var list [][]int

// begin为每次循环遍历的起点,设置begin为了不重复使用前面使用过的数
func dfs(candidates []int, target int, begin int, sil []int) {
    if target == 0 {
        arr := make([]int, len(sil))
        copy(arr, sil)
        list = append(list, arr)
        return
    }
    for i := begin; i < len(candidates); i++ {
        if target-candidates[i] >= 0 {
            arr := append(sil, candidates[i])
            dfs(candidates, target-candidates[i], i, arr)
        }
    }
}

func combinationSum(candidates []int, target int) [][]int {
    list = make([][]int, 0)
    sil := []int{}
    dfs(candidates, target, 0, sil)
    return list
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年12月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 思路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档