全排列不包含重复元素
public LinkedList res = new LinkedList();
public List<List<Integer>> permute(int[] nums) {
LinkedList path = new LinkedList();
back(nums,new boolean[nums.length],path);
return res;
}
public void back(int[] nums,boolean[] check,LinkedList path){
if(path.size() == nums.length){
res.add(new LinkedList(path));
return;
}
for(int i=0;i<nums.length;i++){
if (check[i]){
continue;
}
path.add(nums[i]);
check[i] = true;
back(nums,check,path);
path.removeLast();
check[i] = false;
}
}
全排列 包含重复元素
public ArrayList result = new ArrayList();
public List<List<Integer>> permuteUnique(int[] nums) {
Arrays.sort(nums);
backtrace(nums,new boolean[nums.length],new ArrayList());
return result;
}
public void backtrace(int[] nums ,boolean[] check, ArrayList path){
if(path.size() == nums.length){
result.add(new ArrayList(path));
return;
}
for(int i = 0;i<nums.length;i++){
if (check[i]){
continue;
}
if(i>0 && nums[i] == nums[i-1] && check[i-1]){
continue;
}
path.add(nums[i]);
check[i] = true;
backtrace(nums,check,path);
path.remove(path.size() -1);
check[i] = false;
}
}











网友评论