78.子集
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
示例1
输入: nums = [1,2,3]
输出: [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
示例2
输入: nums = [0]
输出: [[],[0]]
解法
func subsets(nums []int) [][]int {
res:=[][]int{}
dfs78(nums,0,nil,&res)
return res
}
func dfs78(nums []int,index int, temp []int, res *[][]int){
copyTemp:=make([]int,len(temp))
copy(copyTemp,temp)
*res=append(*res,copyTemp)
for i:=index;i<len(nums);i++{
dfs78(nums,i+1,append(temp,nums[i]),res)
}
return
}
解题思路
90.子集II
给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。
示例1
输入: nums = [1,2,2]
输出: [[],[1],[1,2],[1,2,2],[2],[2,2]]
示例2
输入: nums = [0]
输出: [[],[0]]
解法
func subsetsWithDup(nums []int) [][]int {
res:=[][]int{}
sort.Ints(nums)
dfs90(nums,0,nil,&res)
return res
}
func dfs90(nums []int,index int,temp []int, res *[][]int){
copyTemp:=make([]int,len(temp))
copy(copyTemp,temp)
*res=append(*res,copyTemp)
for i:=index;i<len(nums);i++{
if i>index&&nums[i]==nums[i-1]{
continue
}
dfs90(nums,i+1,append(temp,nums[i]),res)
}
return
}
解题思路