• java中的排列组合


    使用之前需要声明一个Combine的对象,调用startCombile方法,可返回想要的组合数或者个数,参数介绍很重要

    public class Combine { private Object[] oldArr; private Object[] newArr; private List<Object[]> list=new ArrayList<Object[]>(); private int needLength; private int count; private boolean flag; /** * 例如我要在5个数中取个,那么arr就是包含这五个的数组,needLength就是3 * @param arr 要进行的数组 * @param needLength 需要的个数 * @param flag true代表返回一个list,list里包含了所有的组合情况;false代表返回一个数字,这个数字就是所有组合的个数 * @return * 此方法为运行入口 */ public Object startCombile(Object[] arr,int needLength,boolean flag){ this.needLength=needLength; this.oldArr=arr; this.newArr=new Object[needLength]; this.flag=flag; getCombineResult(this.oldArr.length,needLength); if(flag){ return list; }else{ return count; } } private void getCombineResult(int sum,int length){ //5中3个 sum代表5,length代表3,因为递归,到最后肯定是n个里面取1个,当取1个的时候一层递归就结束了,会返回到上一层继续递归 if(length>0){ for(int i=oldArr.length-sum;i<oldArr.length;i++){ newArr[needLength-length]=oldArr[i]; if(length==1){ if(flag){ Object[] myArr=new Object[needLength]; for(int j=0;j<newArr.length;j++){ myArr[j]=newArr[j]; } list.add(myArr); }else{ count++; } } sum--; getCombineResult(sum,length-1); } } } }

      

  • 相关阅读:
    MTU 理解和遇到的一些问题
    tm使用
    C++字符串中转义符
    安卓系统修改host文件简单教程
    公有继承的一个理解
    模板打印函数
    linux 设置时区
    ACE中的inline
    SecureCRT中脚本进行交互,发送Ctrl+C
    C++中多态的实现原理
  • 原文地址:https://www.cnblogs.com/byit/p/3709289.html
Copyright © 2020-2023  润新知