Given a collection of integers that might contain duplicates, nums, return all possible subsets.
Note: The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,2], a solution is:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
给定数集,返回所有子集。
思路:DP。同一层遇到相同的数字时跳过,进入下一循环。
public class Solution {
public List<List<int>> SubsetsWithDup(int[] nums) {
List<List<int>> res = new List<List<int>>();
Array.Sort(nums);
List<int> temp = new List<int>();
subset(res,temp , nums, 0);
return res;
}
public static void subset(List<List<int>> res, List<int> temp, int[] nums, int start)
{
if (start == nums.Length+1) return;
res.Add(new List<int>(temp));
int i = start;
while (i < nums.Length)
{
temp.Add(nums[i]);
subset(res, temp, nums, i + 1);
temp.RemoveAt(temp.Count - 1);
i++;
while (i < nums.Length && nums[i] == nums[i - 1]) { i++; }
}
}
}