要求:给出一个具有重复数字的列表,找出列表所有不同的排列。

样例:

 

给出列表 [1,2,2],不同的排列有:

[  [1,2,2],  [2,1,2],  [2,2,1]]

思路:和前面的1没有重复数字的全排列差不多,http://blog.csdn.net/aphysia/article/details/77774105,其中为了去除重复的元素,先对它们进行排序,然后相同的数会在一起,我们插入的时候要求排在前面的在结果中也排在前面,这样就保证了唯一性。

 

class Solution {    /**     * @param nums: A list of integers.     * @return: A list of unique permutations.     */    public List<List> permuteUnique(int[] nums) {        // Write your code here        ArrayList<List>res=new ArrayList<>();        if(nums == null){            return null;        }        if(nums.length == 0)        {            res.add(new ArrayList());            return res;        }        ArrayListList=new ArrayList<>();        ArrayList.sort(nums);        int n=nums.length;        int []visited=new int[n];        for(i=0;i<n;i++){            visited[i]=0;        }        helpsort(res,list,visited,nums);        return res;    }     private void helper(ArrayList<List> res, ArrayListlist, int[] visited, int[] nums) {        if(nums.length == list.size()) {            res.add( new ArrayList(list));            return;        }        for(int i=0;i<nums.length;i++) {            if(visited[i] == 1 || (i!= 0 && (visited[i-1] == 0 && nums[i] == nums[i-1])))//已经被访问过的和没有被访问过但是前面有一个相同的数没有被访问过,都不能加进去                continue;            list.add(nums[i]);            visited[i] = 1;            helper(res, list, visited, nums);            list.remove(list.size()-1);            visited[i] = 0;        }    }}

 

**此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~**

 

**技术之路不在一时,山高水长,纵使缓慢,驰而不息。**

 

**公众号:秦怀杂货店**

 

 

 

©著作权归作者所有:来自51CTO博客作者秦怀杂货店的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. (lintcode)第6题 合并排序数组
  2. 从键盘输入若干个学生成绩,输入负数作为输入结束标记,用数组和函数
  3. 圣怀布局,网格(容器,项目,单元,轨道,间距,排列,位置,对齐),隐式
  4. PHP 将一位数组进行倒序排列
  5. C/C++实现在一组排列好的数中插入一组数,并按照原先排列方式进行
  6. 字节尿性,康托展开求第K个排列!
  7. 小白真能看一篇文章就学会全排列算法吗?
  8. android中对目录下的文件按时间排序
  9. android相对布局--计算器的例子

随机推荐

  1. 使用Javascript / jQuery的/ CSS。如何在
  2. 根据循环中的i改变函数中的参数
  3. [JS]小数部分处理
  4. iPhone的网站主题 - 什么是基本成分?
  5. 如何在bing地图中添加信息框到一个航点
  6. 函数的作用是:在javascript中将时间戳转
  7. Vue自定义指令实现checkbox全选功能
  8. 多种方法用javascript输出黑白棋
  9. javascript 动态数组的使用
  10. 检查重复项后使用insertbefore()