lintcode|【两次过】Lintcode 16. 带重复元素的排列

给出一个具有重复数字的列表,找出列表所有不同的排列。
样例
给出列表 [1,2,2],不同的排列有:

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

挑战
使用递归和非递归分别完成该题。
解题思路: 与Lintcode 15. 全排列 相比只加了两句话:
Arrays.sort(nums) // 排序这样所有重复的数
if (i > 0 && nums[i] == nums[i - 1] && !visited[i - 1]) { continue; } // 跳过会造成重复的情况
public class Solution { /* * @param :A list of integers * @return: A list of unique permutations */ public List> permuteUnique(int[] nums) { // write your code here List> res = new ArrayList<>(); boolean[] visited = new boolean[nums.length]; if(nums == null) return res; if(nums.length == 0){ res.add(new ArrayList()); return res; }Arrays.sort(nums); dfs(nums, new ArrayList(), res, visited, 0); return res; }private void dfs(int[] nums, List list, List> res, boolean[] visited, int index){ if(list.size() == nums.length){ res.add(new ArrayList(list)); return; }for(int i=0; i

【lintcode|【两次过】Lintcode 16. 带重复元素的排列】

    推荐阅读