您的位置:首页 > 其它

LeetCode刷题笔录Permutations II

2014-08-21 08:55 225 查看
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]
,
and
[2,1,1]
.
这题和Permutations差不多。不同的就是要处理一下duplicate的情况。可以先给数组排个序,然后再选择元素的时候在所有相同的元素里只选择一个。比如11223就选第二个1和第二个2.
public class Solution {
public List<List<Integer>> permuteUnique(int[] num) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
if(num == null || num.length == 0)
return res;
Arrays.sort(num);
List<Integer> arr = new ArrayList<Integer>();
recursive(num, res, arr, new boolean[num.length]);
return res;
}

public void recursive(int[] num, List<List<Integer>> res, List<Integer> arr, boolean[] used){
if(arr.size() == num.length){
res.add(new ArrayList<Integer>(arr));
return;
}

for(int i = 0; i < num.length; i++){
//skip the duplicates
if(i > 0 && !used[i - 1] && num[i] == num[i - 1])
continue;
if(!used[i]){
used[i] = true;
arr.add(num[i]);
recursive(num, res, arr, used);
arr.remove(arr.size() - 1);
used[i] = false;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: