From 26f3ee6c93c7ed53a3d98ba1f92fbc8d295dfcb8 Mon Sep 17 00:00:00 2001 From: X-shuffle <53906918+X-shuffle@users.noreply.github.com> Date: Sat, 19 Jun 2021 23:23:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=200040.=E7=BB=84=E5=90=88?= =?UTF-8?q?=E6=80=BB=E5=92=8CII=20go=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加 0040.组合总和II go版本 --- problems/0040.组合总和II.md | 42 +++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/problems/0040.组合总和II.md b/problems/0040.组合总和II.md index a462b524..021bba94 100644 --- a/problems/0040.组合总和II.md +++ b/problems/0040.组合总和II.md @@ -314,6 +314,48 @@ class Solution: ``` Go: + +> 主要在于如何在回溯中去重 + +```go +func combinationSum2(candidates []int, target int) [][]int { + var trcak []int + var res [][]int + var history map[int]bool + history=make(map[int]bool) + sort.Ints(candidates) + backtracking(0,0,target,candidates,trcak,&res,history) + return res +} +func backtracking(startIndex,sum,target int,candidates,trcak []int,res *[][]int,history map[int]bool){ + //终止条件 + if sum==target{ + tmp:=make([]int,len(trcak)) + copy(tmp,trcak)//拷贝 + *res=append(*res,tmp)//放入结果集 + return + } + if sum>target{return} + //回溯 + // used[i - 1] == true,说明同一树支candidates[i - 1]使用过 + // used[i - 1] == false,说明同一树层candidates[i - 1]使用过 + for i:=startIndex;i0&&candidates[i]==candidates[i-1]&&history[i-1]==false{ + continue + } + //更新路径集合和sum + trcak=append(trcak,candidates[i]) + sum+=candidates[i] + history[i]=true + //递归 + backtracking(i+1,sum,target,candidates,trcak,res,history) + //回溯 + trcak=trcak[:len(trcak)-1] + sum-=candidates[i] + history[i]=false + } +} +``` javaScript: ```js