计算组合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