输出一个集合的所有子集,从长到短
2014-09-26 17:27
483 查看
public class Ziji { public static List<List<Integer>> Sets(int a[]) { List<List<Integer>> res = new ArrayList<List<Integer>>(); int len = a.length; int n = 1 << len; for (int i = n; i > 0; i--) { int k = i; List<Integer> list = new ArrayList<Integer>(); for (int j = 0; j < len; j++) { if ((k & 1) == 1) { list.add(a[j]); } k = k >> 1; } res.add(list); } Collections.sort(res, new Comparator<List<Integer>>() { @Override public int compare(List<Integer> listA, List<Integer> listB) { // TODO Auto-generated method stub return listB.size() - listA.size(); } }); return res; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int[] a = { 1, 2, 3, 4 }; List<List<Integer>> res = Ziji.Sets(a); for (List<Integer> rr : res) { for (Integer r : rr) { System.out.print(r); } System.out.println("\n"); } } }
用到了位操作的知识,感觉比较巧妙和高效。
相关文章推荐
- 给定一个集合,输出它的所有子集
- 给定一个集合,输出它的所有子集(JAVA实现)
- 求一个集合的所有子集 输出一个数所有平方和的情况 背包问题的递归解决
- 输出一个集合的所有子集(算法)
- 输出一个集合的所有子集
- 输出一个集合的所有子集
- 输出一个集合的所有子集(算法)
- 有一个集合A,它又n个元素,请用回溯法输出它所有的子集。
- 输出一个集合的幂集(所有子集)
- 输入一个集合,输出这个集合的所有子集
- 输出一个集合的所有子集(算法)
- 输出一个集合所有子集的元素和(Print sums of all subsets of a given set)
- 求一个集合的所有子集
- 两种方法寻找一个集合的所有子集
- 面试题: 已知一个含有n个不同元素的集合,要求打印其所有具有k个元素的子集(不允许有重复的)
- 输出一个集合的所有子集合-Java代码实现(一)
- LeetCode(Subsets)找出一个集合的所有子集
- 算法篇:输出集合的所有子集
- 一个集合的所有子集的Java代码实现
- 输出一个集合所有的子集合