47. Permutations II

来源:互联网 发布:打开文件的软件 编辑:程序博客网 时间:2024/05/29 18:46

原题

求解带有重复元素的序列的所有排序
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);            }        }    }