A Permutations is rearrangement of all the elements of the array.
Example:
Permutations
class Solution {
List<List<Integer>> list = new ArrayList<>();
public List<List<Integer>> permute(int[] nums) {
int taken[] = new int[nums.length];
permute(nums, taken, new ArrayList<>());
return list;
}
public void permute(int nums[], int [] taken, List<Integer> l){
if(l.size()== nums.length){
list.add(new ArrayList<>(l));
return;
}
for(int i = 0;i< nums.length;i++){
if(i>0 && nums[i]==nums[i-1] && taken[i-1]==1) continue;
if(taken[i]==0){
taken[i] = 1;
l.add(nums[i]);
permute(nums,taken,l);
l.remove(l.size()-1);
taken[i]=0;
}
}
}
}
Example 2: Permutation II - get unique permutations
class Solution {
List<List<Integer>> list = new ArrayList<>();
public List<List<Integer>> permuteUnique(int[] nums) {
Arrays.sort(nums);
int taken[] = new int[nums.length];
permute(nums, taken, new ArrayList<>());
return list;
}
public void permute(int nums[], int [] taken, List<Integer> l){
if(l.size()== nums.length){
list.add(new ArrayList<>(l));
return;
}
for(int i = 0;i< nums.length;i++){
//If previous duplicate is NOT used → skip current
if(i>0 && nums[i]==nums[i-1] && taken[i-1]==0) continue;
if(taken[i]==0){
taken[i] = 1;
l.add(nums[i]);
permute(nums,taken,l);
l.remove(l.size()-1);
taken[i]=0;
}
}
}
}
Top comments (0)