您的位置:首页 > 其它

输出一个集合的所有子集,从长到短

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");
}
}
}


用到了位操作的知识,感觉比较巧妙和高效。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: