(Java)LeetCode-47. Permutations II
2016-09-28 13:57
302 查看
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
这道题和上一题主要区别在于,存在重复的数,这样,当你遍历到一个重复的数(nums[i] == nums[i-1])的时候,若前面的数没有用过,即flags[i-1] == false,那么直接continue即可
还有这一题是未排序的,需要先行排序。
代码如下:
public class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {
Arrays.sort(nums);
boolean[] flags = new boolean[nums.length];
List<List<Integer>> result = new ArrayList<List<Integer>>();
List<Integer> empty = new ArrayList<Integer>();
permuteUnique(result,empty,nums,flags,0);
return result;
}
private void permuteUnique(List<List<Integer>> result, List<Integer> empty, int[] nums, boolean[] flags, int cnt) {
// TODO Auto-generated method stub
if(cnt == nums.length){
result.add(new ArrayList<Integer>(empty));
}
for(int i = 0; i < flags.length; i++){
if(i > 0 && nums[i] == nums[i-1] && flags[i-1] == false){
continue;
}
if(flags[i] == false){
empty.add(nums[i]);
flags[i] = true;
permuteUnique(result, empty, nums, flags, cnt+1);
flags[i] = false;
empty.remove(empty.size()-1);
}
}
}
}
For example,
[1,1,2]have the following unique permutations:
[ [1,1,2], [1,2,1], [2,1,1] ]
这道题和上一题主要区别在于,存在重复的数,这样,当你遍历到一个重复的数(nums[i] == nums[i-1])的时候,若前面的数没有用过,即flags[i-1] == false,那么直接continue即可
还有这一题是未排序的,需要先行排序。
代码如下:
public class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {
Arrays.sort(nums);
boolean[] flags = new boolean[nums.length];
List<List<Integer>> result = new ArrayList<List<Integer>>();
List<Integer> empty = new ArrayList<Integer>();
permuteUnique(result,empty,nums,flags,0);
return result;
}
private void permuteUnique(List<List<Integer>> result, List<Integer> empty, int[] nums, boolean[] flags, int cnt) {
// TODO Auto-generated method stub
if(cnt == nums.length){
result.add(new ArrayList<Integer>(empty));
}
for(int i = 0; i < flags.length; i++){
if(i > 0 && nums[i] == nums[i-1] && flags[i-1] == false){
continue;
}
if(flags[i] == false){
empty.add(nums[i]);
flags[i] = true;
permuteUnique(result, empty, nums, flags, cnt+1);
flags[i] = false;
empty.remove(empty.size()-1);
}
}
}
}
相关文章推荐
- [leetcode-47]Permutations II(java)
- [LeetCode]47 Permutations II
- [leetcode 47] Permutations II
- leetcode 47:Permutations II
- LeetCode47——Permutations II
- [Leetcode] Permutations II (Java)
- LeetCode 47. Permutations II
- [LeetCode][Java] Permutations II
- leetCode 47.Permutations II (排列组合II) 解题思路和方法
- [Leetcode 101] 47 Permutations II
- [LeetCode]47.Permutations II
- leetcode || 47、 Permutations II
- [Leetcode] 47. Permutations II
- leetcode 47: Permutations II
- Leetcode 46/47 Permutations, Permutations II
- [LeetCode]47 Permutations II
- LeetCode --- 47. Permutations II
- Java for LeetCode 047 Permutations II
- LeetCode(47)Permutations II
- LeetCode-47-Permutations II(DFS/剪枝)-Medium