1.全排列

全排列
class Solution {
List<List<Integer>> res = new ArrayList<>();
LinkedList<Integer> path = new LinkedList<>();
boolean[] used;
public List<List<Integer>> permute(int[] nums) {
if(nums.length==0){
return res;
}
used = new boolean[nums.length];
permuteHelper(nums);
return res;
}
void permuteHelper(int[] nums){
if(path.size()==nums.length){
res.add(new ArrayList<>(path));
return;
}
for(int i=0;i<nums.length;i++){
if(used[i]) continue;
path.add(nums[i]);
used[i]=true;
permuteHelper(nums);
used[i] = false;
path.removeLast();
}
}
}
2.全排列 II

全排列 II
class Solution {
List<List<Integer>> res = new ArrayList<>();
LinkedList<Integer> path = new LinkedList<>();
boolean[] used;
public List<List<Integer>> permuteUnique(int[] nums) {
used = new boolean[nums.length];
Arrays.sort(nums);
Arrays.fill(used,false);
backTracking(nums,used);
return res;
}
void backTracking(int[] nums, boolean[] used){
if(path.size()==nums.length){
res.add(new ArrayList<>(path));
return;
}
for(int i=0;i<nums.length;i++){
if(i>0&&nums[i]==nums[i-1]&&used[i-1]==false) continue;
if(used[i]==false){
path.add(nums[i]);
used[i]=true;
backTracking(nums,used);
used[i]=false;
path.removeLast();
}
}
}
}