网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

java如何遍历m取n的所有组合

这篇文章将为大家详细讲解有关java如何遍历m取n的所有组合,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

成武网站建设公司创新互联公司,成武网站设计制作,有大型网站制作公司丰富经验。已为成武上1000+提供企业网站建设服务。企业网站搭建\成都外贸网站制作要多少钱,请找那个售后服务好的成武做网站的公司定做!

 示例:

  * 求m取n的所有组合。

  * m个数分别为0,1,2...m-1.

  * 算法简述:

  *   二个组合,若仅有元素顺序不同,视其为同一个组合。

  *   左位系低位,右位系高位。

  *   按自然的取法取第一个组合(各数位分别是:0,1,2...n-1),以后的所有组合都经上一个组合变化而来:

  *   从右至左,找到有增量空间的位,将其加1,使高于该位的所有位,均比其左邻位大1,从而形成新的组合。

  *   若所有位均无增量空间,说明所有组合均已被遍历。

  *   使用该方法所生成的组合数中:对任意组合int[] c,下标小的数必定小于下标大的数.

  *


*/
public class Combination {
int n, m;
int[] pre;//previous combination.
public Combination(int n, int m) {
this.n = n;
this.m = m;
}
/**
* 取下一个组合。可避免一次性返回所有的组合(数量巨大,浪费资源)。
* if return null,所有组合均已取完。
*/
public int[] next() {
if (pre == null) {//取第一个组合,以后的所有组合都经上一个组合变化而来。
pre = new int[n];
for (int i = 0; i < pre.length; i++) {
pre = i;
}
int[] ret = new int[n];
System.arraycopy(pre, 0, ret, 0, n);
return ret;
}
int ni = n - 1, maxNi = m - 1;
while (pre[ni] + 1 > maxNi) {//从右至左,找到有增量空间的位。
ni--;
maxNi--;
if (ni < 0)
return null;//若未找到,说明了所有的组合均已取完。
}
pre[ni]++;
while (++ni < n) {
pre[ni] = pre[ni - 1] + 1;
}
int[] ret = new int[n];
System.arraycopy(pre, 0, ret, 0, n);
return ret;
}
}

关于“java如何遍历m取n的所有组合”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。


网站标题:java如何遍历m取n的所有组合
本文来源:http://bjjierui.cn/article/jogpgd.html

其他资讯