static int l=0;//用于存放组合后的数组下标移动
//a[]数字数组,length数字个数,index用于排列(初始为0),re[]存放排列后的数组
//re[]可在调用combination()方法中定义:int re[]=new int[num];
//num为可组合种类总数*每组个数
public static void combination(int[] a, int length, int index ,int[] re) {
if (index == length) {
for (int i = 0; i < length; i++) {
re[l]=a[i];
l++;
}
System.out.println("!");
} else {
for (int i = index; i < length; i++) {
if (isSwap(a, length, i)) {
swap(a, index, i);
combination(a, length, index + 1,re);
swap(a, index, i);
}
}
}
}
//防止重复排列
private static boolean isSwap(int[] a, int length, int index) {
for (int i = index + 1; i < length; i++) {
if (a[index] == a[i]) {
return false;
}
}
return true;
}
private static void swap(int[] a, int index, int i) {
int temp = a[index];
a[index] = a[i];
a[i] = temp;
}
效果展示
例如:1,2,3这组数字的排列组合有3 * 2 * 1=6种,每组3个数字。
num=6*3=18
6种排列分别为
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
re[]中为顺序存储,如:
1,2,3,1,3,2,2,1,3,2,3,1,3,1,2,3,2,1
可三为一组进行取用