[LeetCode]--47. Permutations II
2016-08-08 13:45
423 查看
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
Some Code
Reference1
Reference2
Give some excellent guys’ python code!
Build the list of permutations one number at a time, insert the number into each already built permutation but only before other instances of the same number, never after. Inspired by cbmbbz’s already good solution, though I then saw others had used the idea earlier.
Very similar to Permutation I, see explanations in https://leetcode.com/discuss/19510/my-ac-simple-iterative-java-python-solution. To handle duplication, just avoid inserting a number before any of its duplicates.
For example,
[1,1,2]have the following unique permutations:
[ [1,1,2], [1,2,1], [2,1,1] ]
Some Code
Java Solution
public class Solution { public List<List<Integer>> permuteUnique(int[] nums) { List<List<Integer>> res = new ArrayList<List<Integer>>(); if(nums==null || nums.length==0) return res; boolean[] used = new boolean[nums.length]; List<Integer> list = new ArrayList<Integer>(); Arrays.sort(nums); dfs(nums, used, list, res); return res; } public void dfs(int[] nums, boolean[] used, List<Integer> list, List<List<Integer>> res){ if(list.size()==nums.length){ res.add(new ArrayList<Integer>(list)); return; } for(int i=0;i<nums.length;i++){ if(used[i]) continue; if(i>0 &&nums[i-1]==nums[i] && !used[i-1]) continue; used[i]=true; list.add(nums[i]); dfs(nums,used,list,res); used[i]=false; list.remove(list.size()-1); } } }
Reference1
Reference2
Give some excellent guys’ python code!
Build the list of permutations one number at a time, insert the number into each already built permutation but only before other instances of the same number, never after. Inspired by cbmbbz’s already good solution, though I then saw others had used the idea earlier.
def permuteUnique(self, nums): perms = [[]] for n in nums: perms = [p[:i] + + p[i:] for p in perms for i in xrange((p + ).index(n) + 1)] return perms
Very similar to Permutation I, see explanations in https://leetcode.com/discuss/19510/my-ac-simple-iterative-java-python-solution. To handle duplication, just avoid inserting a number before any of its duplicates.
def permuteUnique(self, nums): ans = [[]] for n in nums: new_ans = [] for l in ans: for i in xrange(len(l)+1): new_ans.append(l[:i]+ +l[i:]) if i<len(l) and l[i]==n: break #handles duplication ans = new_ans return ans
相关文章推荐
- [Leetcode 47, Hard] Permutations II
- [Leetcode] 47. Permutations II
- Leetcode 47. Permutations II
- LeetCode(47)Permutations II
- Leetcode 46. Permutations & 47. Permutations II
- leetcode 47. Permutations II
- leetcode-47. Permutations II
- [LeetCode]47.Permutations II
- LeetCode_OJ【47】Permutations II
- LeetCode(47)Permutations II
- LeetCode 47. Permutations II(排列)
- [LeetCode] 47. Permutations II
- LeetCode *** 47. Permutations II (Backtracking )
- LeetCode-47-Permutations II(DFS/剪枝)-Medium
- LeetCode 47. Permutations II
- leetcode 47. Permutations II 全排列问题(去掉重复元素)+递归
- LeetCode46,47 Permutations, Permutations II
- LeetCode 47.Permutations II
- [LeetCode]47 Permutations II
- leetcode 47. Permutations II