您的位置:首页 > 其它

leetcode 47. Permutations II

2017-06-26 18:29 375 查看
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]
]

还是全排列问题,这次有重复数字,是一个通用解法,每次递归要看该数字是否是重复数字,如果是的话,前一个数字有没有被使用,使用了则可以递归,没有使用的话,该数字也要跳过。

public class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
if(nums.length==0){
return res;
}
Arrays.sort(nums);
List<Integer> item = new ArrayList<Integer>();
boolean []use = new boolean[nums.length];
helper(nums,res,item,use);
return res;
}
public void helper(int[]nums,List<List<Integer>>res,List<Integer>item,boolean[]use){
if(item.size()==nums.length){
res.add(new ArrayList<Integer>(item));
return ;
}
for(int i=0;i<nums.length;i++){
if(i>0&&!use[i-1]&&nums[i-1]==nums[i])continue;
if(!use[i]){
use[i]=true;
item.add(nums[i]);
helper(nums,res,item,use);
item.remove(item.size()-1);
use[i]=false;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: