78. 子集
var(
path []int
res [][]int
)
func subsets(nums []int) [][]int {
path = make([]int,0)
res = make([][]int,0)
dfs(nums,0)
return res
}
func dfs(nums []int, start int) {
tmp := make([]int,len(path)) 收集每个元素
copy(tmp,path)
res = append(res,tmp)
for i := start ; i < len(nums) ; i++ {
path = append(path,nums[i])
dfs(nums,i+1)
path = path[:len(path)-1]
}
}
90. 子集 II
var(
path []int
res [][]int
)
func subsetsWithDup(nums []int) [][]int {
path = make([]int,0)
res = make([][]int,0)
sort.Ints(nums)
dfs(nums,0)
return res
}
func dfs(nums []int,start int) {
tmp := make([]int,len(path))
copy(tmp,path)
res = append(res,tmp)
for i := start ; i < len(nums) ; i++ {
if i != start && nums[i] == nums[i-1] { 如果当前元素和之前元素相同,则说明该元素的集合会与之前元素相同,所以需要去除当前元素 ,其他部分与子集代码相同
continue
}
path = append(path,nums[i])
dfs(nums,i+1)
path = path[:len(path)-1]
}
}