LeetCode90. 子集2Golang版
1. 问题描述
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:
解集不能包含重复的子集。
2. 思路
回溯模板
3. 代码
func subsetsWithDup(nums []int) [][]int {
var res [][]int
var path []int
used := make([]bool, len(nums))
sort.Ints(nums)
backtracking(nums, 0, used, path, &res)
return res
}
func backtracking(nums []int, startIndex int, used []bool, path []int, res *[][]int) {
temp := make([]int, len(path))
copy(temp, path)
*res = append(*res, temp)
for i := startIndex; i < len(nums); i++ {
if i > 0 && nums[i - 1] == nums[i] && used[i - 1] == false {
continue
}
used[i] = true
path = append(path, nums[i])
backtracking(nums, i+1, used, path, res)
path = path[:len(path) - 1]
used[i] = false
}
}