子集 II(LeetCode 90)
2020-02-20 本文已影响0人
倚剑赏雪
题目https://www.jianshu.com/p/3150417100af升级版
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: [1,2,2]
输出:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
解析
1.同Leetcode78题
2.首先对数组进行排序
3.加入的时候,如果判断与前一位相等直接跳过
代码
public IList<IList<int>> SubsetsWithDup(int[] nums) {
IList<IList<int>> res = new List<IList<int>>();
Array.Sort(nums);//排序
BackTrackRepeat(0,nums,res,new List<int>());
return res;
}
void BackTrackRepeat(int idx,int[] nums,IList<IList<int>> res,IList<int> temp)
{
res.Add(new List<int>(temp));
for (int i = idx; i < nums.Length; i++)
{
if(i>idx&&nums[i] == nums[i-1]) continue;
temp.Add(nums[i]);
BackTrackRepeat(i+1,nums,res,temp);
temp.RemoveAt(temp.Count-1);
}
}