zoukankan      html  css  js  c++  java
  • 输出一个集合的所有子集,从长到短

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

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

  • 相关阅读:
    Jinja2模板引擎简介
    单元测试
    Blueprint属性
    状态保持中的cookie
    异常捕获abort方法
    数据库迁移
    Flask-SQLAlchemy中 ORM 一对多的模型关系定义步骤
    request请求的常用属性
    搜索引擎
    Mark
  • 原文地址:https://www.cnblogs.com/nannanITeye/p/3995319.html
Copyright © 2011-2022 走看看