原题
求解带有重复元素的序列的所有排序
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
[1,1,2] have the following unique permutations:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
思路
在无重复那道题的基础上,添加去重操作
代码
public class Solution
{
private IList<IList<int>> result = new List<IList<int>>();
public IList<IList<int>> PermuteUnique(int[] nums)
{
Array.Sort(nums);
dfs(new List<int>(), nums, new bool[nums.Length]);
return result;
}
private void dfs(IList<int> tmp, int[] nums,bool[] used)
{
if (tmp.Count == nums.Length)
{
result.Add(new List<int>(tmp));
return;
}
for (int i = 0; i < nums.Length; i++)
{
if (used[i] == true) //深度方向递归还没完时
continue;
if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false)
//与前一个元素相等,且前一个元素已经递归完毕
continue;
used[i] = true;
tmp.Add(nums[i]);
dfs(tmp,nums,used);
used[i] = false;
tmp.RemoveAt(tmp.Count-1);
}
}
}