1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| public class algorithm90 { @Test public void test(){ List<List<Integer>> result = subsetsWithDup(new int[]{1,2,2}); int index = 0; for(List<Integer> list : result){ System.out.println("列表:" + index ); index++; System.out.println(Arrays.toString(list.toArray())); } } public List<List<Integer>> subsetsWithDup(int[] nums) { int len = nums.length; Set<List<Integer>> listset = new HashSet<>(); for(int i = 0;i <= len ;i++){ getList(listset, new ArrayList<>(), nums, 0, i, len); } List<List<Integer>> result = new ArrayList<>(); result.addAll(listset); return result; } public void getList(Set<List<Integer>> listset, List<Integer> prelist, int[] nums, int start, int getNum, int len){ List<Integer> list = new ArrayList<>(); list.addAll(prelist); Collections.sort(list); if(getNum == 0){ listset.add(list); return; } for(int i = start;i < len;i++){ list.add(nums[i]); getList(listset, list,nums,i + 1,getNum - 1, len); list.remove(list.size() - 1); }
} }
|