您的位置:首页 > 编程语言 > Java开发

(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,
[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);
}

}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  backtracking