栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

生成所有可能的组合-Java

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

生成所有可能的组合-Java

将组合视为一个二进制序列,如果所有4个都存在,则得到1111,如果缺少第一个字母,则得到0111,依此类推。对于n个字母,我们将得到2 ^ n
-1(从0开始不包括在内)组合。

现在,在生成的二进制序列中,如果代码为1,则该元素存在,否则不包括在内。以下是概念验证的实现:

String arr[] = { "A", "B", "C", "D" };int n = arr.length;int N = (int) Math.pow(2d, Double.valueOf(n));  for (int i = 1; i < N; i++) {    String pre = Integer.toBinaryString(N | i).substring(1);    for (int j = 0; j < n; j++) {        if (pre.charAt(j) == '1') { System.out.print(arr[j]);        }    }    System.out.println();}

这是一个通用的可重用实现:

public static <T> Stream<List<T>> combinations(T[] arr) {    final long N = (long) Math.pow(2, arr.length);    return StreamSupport.stream(new AbstractSpliterator<List<T>>(N, Spliterator.SIZED) {        long i = 1;        @Override        public boolean tryAdvance(Consumer<? super List<T>> action) { if(i < N) {     List<T> out = new ArrayList<T>(Long.bitCount(i));     for (int bit = 0; bit < arr.length; bit++) {         if((i & (1<<bit)) != 0) {  out.add(arr[bit]);         }     }     action.accept(out);     ++i;     return true; } else {     return false; }        }    }, false);}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/595678.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号