首页 > 代码库 > 输出一个集合的所有子集,从长到短
输出一个集合的所有子集,从长到短
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"); } }}
用到了位操作的知识,感觉比较巧妙和高效。
输出一个集合的所有子集,从长到短
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。