欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

计算组合An|n

程序员文章站 2022-07-06 15:26:40
int[] ary = IntStream.range(1,5).toArray(); // 数据 次代码使用 5 代替 NList result = new ArrayList<>(); // 记录结果集result.add(new int[0]); // 初始化容器for(int i =1 ; i < 5 + 1; i++) { // 不断的向容器添加数据 List tmp = result; // 临时迭代对象,....
int[] ary = IntStream.range(1,5).toArray(); // 数据 次代码使用 5 代替 N
List<int[]> result = new ArrayList<>();  // 记录结果集
result.add(new int[0]); // 初始化容器
for(int i =1 ; i < 5 + 1; i++) { // 不断的向容器添加数据
    List<int []> tmp = result; // 临时迭代对象,每次都会新增数据,故需要中间容器
    result = new ArrayList<>(); // 保存添加数据后的容器
    for (int[] ints : tmp) { // 迭代容器,并插入数据
        for(int j =0; j < i ; j ++) {
        int[] item = new int[i];
        System.arraycopy(ints, 0, item,0,  j);
        System.arraycopy(ints, j, item,j+1, ints.length - j);
        item[j] = i;
        result.add(item);
      }
    }
}

采取插入法,不断的向集合中插入新增数据

 

使用递归解法


    public static  List<int[]> arrange (int [] ary){
        if(ary.length == 2) {
            int a[] = new int[] {ary[0], ary[1]};
            int b[] = new int[] {ary[1], ary[0]};
            List<int[]> result = new ArrayList<>();
            result.add(a);
            result.add(b);
            return result;
        } else {
            int chileAry[] = new int[ary.length-1];
            int a = ary[0];
            System.arraycopy(ary, 1, chileAry, 0, ary.length -1);
            List<int[]> childlist =  arrange(chileAry);
            List<int[]> result = new ArrayList<int[]>((int)(childlist.size()*childlist.get(0).length * 1.5));
            int length =  childlist.get(0).length + 1;
            for (int i=0;i < length; i++) {
                for (int[] ints : childlist) {
                    int[] item = new int[ints.length + 1];
                    System.arraycopy(ints,0, item,0,i);
                    System.arraycopy(ints,i, item,i+1,ints.length - i);
                    item[i] = a;
                    result.add(item);
                }
            }
            return result;
        }
    }

 

本文地址:https://blog.csdn.net/a1055186977/article/details/109565562

相关标签: java 算法