网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  java基础:遍历m取n的所有组合     
  文章作者:未知  文章来源:水木森林  
  查看:130次  录入:管理员--2007-11-17  
 
     /**
  * <pre>
  * 求m取n的所有组合。
  * m个数分别为0,1,2...m-1.
  * 算法简述:
  *   二个组合,若仅有元素顺序不同,视其为同一个组合。
  *   左位系低位,右位系高位。
  *   按自然的取法取第一个组合(各数位分别是:0,1,2...n-1),以后的所有组合都经上一个组合变化而来:
  *   从右至左,找到有增量空间的位,将其加1,使高于该位的所有位,均比其左邻位大1,从而形成新的组合。
  *   若所有位均无增量空间,说明所有组合均已被遍历。
  *   使用该方法所生成的组合数中:对任意组合int[] c,下标小的数必定小于下标大的数.
  * </pre>
  */
 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] = 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页面计数器    下一篇: 开源面向对象数据库db4o之旅:初识db4o
  相关文档
使用异步servlet扩展ajax应用程序 11-17
关于考sun java programmer的几点建议 11-17
java/jsp学习系列之jdk的安装 11-17
获取运行中的jvm系统属性 11-17
eclipse插件开发之添加简单的gui元素 11-16
java程序异常处理的特殊情况 11-17
java中如何获得系统路径! 11-17
scjp认证套题解析之一 11-16
tomcat的sql server数据源的配置 11-17
jscript 字母顺序的关键字列表 11-16
j2me应用程序内存优化三招 11-16
新手入门:对j2ee初学者的学习流程介绍 11-16
javaone大会发布《j2ee核心模式》第二版 11-17
java应用者与ide 环境 11-17
21天学通j2ee4 11-17
java智能卡基础篇—未来java平台的新发展 11-17
使用java 输出/输出流读写数据 11-16
教你学会eclipse3.0的swt编程方法 11-17
parentfolder 属性 11-16
freemarker概述 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息