首页 > 代码库 > 输出一个集合的所有子集,从长到短

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

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

用到了位操作的知识,感觉比较巧妙和高效。

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