import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; /**
* Source : https://oj.leetcode.com/problems/subsets-ii/
*
*
* Given a collection of integers that might contain duplicates, S, return all possible subsets.
*
* Note:
*
* Elements in a subset must be in non-descending order.
* The solution set must not contain duplicate subsets.
*
* For example,
* If S = [1,2,2], a solution is:
*
* [
* [2],
* [1],
* [1,2,2],
* [2,2],
* [1,2],
* []
* ]
*
*/
public class SubSet2 { private List<List<Integer>> result = null; /**
*
*
* @return
*/
public List<List<Integer>> subset (int[] arr) {
result = new ArrayList<List<Integer>>();
List<Integer> set = new ArrayList<Integer>();
Arrays.sort(arr);
recursion(arr, 0, set);
return result;
} private void recursion (int[] arr, int index, List<Integer> set) {
if (index == arr.length) {
return;
}
// 初始化上一次出栈的元素为当前将要进栈的元素-1,为了不和将要进栈的元素相同
int last = arr[index]-1;
for (int i = index; i < arr.length; i++) {
// 如果上一次出栈的元素等于准备进栈的元素,则说明两个元素一样,跳过
if (last == arr[i]) {
continue;
}
set.add(arr[i]);
List<Integer> temp = new ArrayList<Integer>(set);
result.add(temp);
recursion(arr, i + 1, set);
last = set.remove(set.size()-1);
}
} private static void print (List<List<Integer>> list) {
for (List<Integer> arr : list) {
System.out.println(Arrays.toString(arr.toArray(new Integer[arr.size()])));
}
System.out.println();
} public static void main(String[] args) {
SubSet2 subSet2 = new SubSet2();
int[] arr = new int[]{1,2,2};
int[] arr1 = new int[]{1,2,3,3,3,3,4};
print(subSet2.subset(arr));
print(subSet2.subset(arr1)); }
}

最新文章

  1. linux命令之tail
  2. 初学者-微信小程序 问题解决办法记录
  3. PHP在linux上执行外部命令
  4. angular 调试 js (分 karms protractor / test e2e unit )
  5. POJ 2096 (概率DP)
  6. java web(四)文件上传与下载
  7. hdu acm 2154(多解取一解)
  8. COM编程之IUnknown接口
  9. SQL实现多行合并一行 .
  10. Transport (VMDB) error -44: Message
  11. EF通用数据层封装类(支持读写分离,一主多从)
  12. springmvc 之 返回值
  13. 文本三剑客---gawk基础
  14. Windows系统安装Azure CLI
  15. E. Exposition
  16. 最长上升子序列(NlogN)总结
  17. ionic1 sqlite的添加使用
  18. JAVA自学笔记18
  19. Django框架的使用教程--视图和路由[二]
  20. (转) GAN应用情况调研

热门文章

  1. Zathura: 轻巧好用的 PDF 查看器]
  2. JUC
  3. [zt+总结]wpf 应用权限问题
  4. React(八)样式及CSS模块化
  5. 转 Singleton clr via c#3
  6. node08
  7. 18 ArcGIS API for JavaScript4.X 系列加载天地图(经纬度)
  8. 把一下程序中的print()函数改写成
  9. R语言读取EXCEL文件的各种方法
  10. [.net 面向对象程序设计深入](36)Redis——基础