Permutations
Given a collection of distinct numbers, return all possible permutations.
For example,
[1,2,3] have the following permutations:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
public class Solution {
List<List<Integer>> res=new ArrayList<List<Integer>>();
List<Integer> cur = new ArrayList<Integer>;
public List<List<Integer>> permute(int[] nums) {
if(nums.length==0) return res;
boolean[] isUsed=new boolean[nums.length];
permuteHelper(nums,isUsed);
return res;
}
private void permuteHelper(int[] nums, boolean[] isUsed){
if(cur.size==nums.lenght){
res.add(cur);
return;
}
for(int i=0;i<nums.length;i++){
if(!isUsed[i]){
cur.add(nums[i]);
isUsed[i]=true;
permuteHelper(nums,isUsed);
isUsed[i]=false;
cur.remove(cur.size()-1);
}
}
}
}
Permutations II
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 {
List<List<Integer>> res=new ArrayList<List<Integer>>();
List<Integer> cur = new ArrayList<Integer>();
public List<List<Integer>> permuteUnique(int[] nums) {
if(nums.length==0) return res;
Arrays.sort(nums);
permuteUniqueHelper(nums,new boolean[nums.length]);
return res;
}
private void permuteUniqueHelper(int[] nums,boolean[] used){
if(cur.size()==nums.lenght){
res.add(cur);
return;
}
for(int i=0;i<nums.length;i++){
if(i>0&&nums[i]==nums[i-1]&&!used[i-1]) continue;
if(!used[i]){
cur.add(nums[i]);
used[i]=true;
permuteUniqueHelper(nums,used);
used[i]=false;
cur.remove(cur.size()-1);
}
}
}
}