首页 > 其他 > 详细

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

时间:2014-09-26 20:44:19      阅读:268      评论:0      收藏:0      [点我收藏+]
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");
        }
    }
}

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

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

原文:http://www.cnblogs.com/nannanITeye/p/3995319.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!