Permutations II
Description
Given a list of numbers with duplicate numbers in it. Find all unique permutations of it.
public class Solution {
/*
* @param : A list of integers
* @return: A list of unique permutations
*/
public List<List<Integer>> permuteUnique(int[] nums) {
// write your code here
List<List<Integer>> results = new ArrayList<>() ;
if(nums == null){
return null ;
}
if(nums.length == 0){
results.add(new ArrayList<Integer>()) ;
return results ;
}
Arrays.sort(nums) ;
List<Integer> subset = new ArrayList<Integer>() ;
helper(nums , new boolean[nums.length] , subset ,results );
return results ;
}
public void helper(int[] nums , boolean[] used , List<Integer>subset ,List<List<Integer>> results ){
if(subset.size() == nums.length){
results.add(new ArrayList<Integer>(subset)) ;
}
for(int i = 0 ; i < nums.length ; i++){
if(used[i]){
continue ;
}
if(i > 0 && nums[i] == nums[i-1] && !used[i-1]){
continue ;
}
subset.add(nums[i]) ;
used[i] = true ;
helper(nums , used , subset , results) ;
used[i] = false ;
subset.remove(subset.size()-1) ;
}
}
};
独特排列:解决重复数字的全排列问题
此篇博客介绍了如何使用Java编程语言解决给定数组中重复数字的全排列问题,通过递归和回溯的方法找到所有不重复的组合。Solution类中的permuteUnique方法首先对数组进行排序,然后利用helper方法进行深度优先搜索,确保每一种排列都是唯一的。
5万+

被折叠的 条评论
为什么被折叠?



