您的位置:首页 > 其它

打印一个含有重复元素数组的所有子集

2016-03-30 11:37 337 查看
打印一个含有重复元素数组的所有子集。例如:[1,2,2]的所有子集为[[],[1],[1,2],[1,2,2],[2],[2,2]]。

1、递归求解

List<List<Integer>> list=new ArrayList<List<Integer>>();
public List<List<Integer>> subsetsWithDup(int[] nums) {
List<Integer> list1=new ArrayList<Integer>();
Arrays.sort(nums);
backTrack(0,nums,list1);
return list;
}

public void backTrack(int i,int[] nums,List<Integer> currentList){
list.add(currentList);
for(int j=i;j<nums.length;j++){
if(j==i || nums[j]!=nums[j-1]){
currentList.add(nums[j]);
backTrack(j+1,nums,new ArrayList<Integer>(currentList));
currentList.remove(currentList.size()-1);
}
}
}


2、直接求解

public List<List<Integer>> subsetsWithDup(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> temp = new ArrayList<>();
res.add(temp);
Arrays.sort(nums);
int l = 0, k;
for (int i = 0; i < nums.length; i++) {
if (i == 0 || nums[i] != nums[i-1])
l = res.size();
k = res.size();
for (int j = k-l; j < k; j++) {
temp = new ArrayList<>(res.get(j));
temp.add(nums[i]);
res.add(temp);
}
}
return res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  打印无重复子集