首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中生成给定集合的nCr组合

在java中生成给定集合的nCr组合
EN

Stack Overflow用户
提问于 2012-08-14 12:11:31
回答 1查看 1.7K关注 0票数 1

我想用java实现生成给定集合的nCr组合。例如,如果集合是{"java","php",".net","python"},程序应该返回给定集合的所有可能的nCr集合。

EN

回答 1

Stack Overflow用户

发布于 2012-08-14 12:24:17

采用Gosper's hack,这可以工作到n= 64。

代码语言:javascript
复制
List<String> inputs;
List<List<String>> ncr = new ArrayList<List<String>>();
for (long x = (1 << r) - 1; (x >>> r) == 0;) {
  // x contains a 1 bit for each input we should choose;
  // iterate over the 1 bits of x
  long y = x;
  List<String> combination = new ArrayList<String>();
  for (int i = Long.numberOfTrailingZeros(y);
       y != 0; i = Long.numberOfTrailingZeros(y)) {
    combination.add(inputs.get(i));
    y &= ~(1 << i);
  }
  long u = x & -x;
  long v = u + x;
  x = v + ((v ^ x) / u) >>> 2;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11945682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档