if (!findFirst && tempNum[i] == 1) {
k = i;
findFirst = true;
}
if (tempNum[i] == 1 && tempNum[i + 1] == 0) {
tempNum[i] = 0;
tempNum[i + 1] = 1;
swap = true;
for (j = 0; j < i - k; j++) { // 同时将其左边的所有"1"全部移动到数组的最左端。
tempNum[j] = tempNum[k + j];
}
for (j = i - k; j < i; j++) {
tempNum[j] = 0;
}
if (k == i && i + 1 == n - m) {// 假如第一个"1"刚刚移动到第n-m+1个位置,则终止整个寻找
end = true;
}
}
if (swap) {
break;
}
}
//printVir(tempNum);// 打印辅助数组
list.add(c.createResult(a, tempNum, m));// 添加下一种默认组合
}
return list;
}
// 根据辅助数组和原始数组生成结果数组
public int[] createResult(int[] a, int[] temp, int m) {
int[] result = new int[m];
int j = 0;
for (int i = 0; i < a.length; i++) {
if (temp[i] == 1) {
result[j] = a[i];
//System.out.println("result[" + j + "]:" + result[j]);
j++;
}
}
return result;
}
// 打印整组数组
public void print(List<int[]> list) {
System.out.println("具体组合结果为:");
for (int i = 0; i < list.size(); i++) {
int[] temp = (int[]) list.get(i);
for (int j = 0; j < temp.length; j++) {
//java.text.DecimalFormat df = new java.text.DecimalFormat("00");// 将输出格式化
//System.out.print(df.format(temp[j]) + " ");
System.out.print("["+temp[j]+"]");
}
System.out.println();
}
}
// 打印辅助数组的方法
public void printVir(int[] a) {
System.out.println("生成的辅助数组为:");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]);
}
System.out.println();
}
public static void main(String[] args) {
int[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; // 整数数组
int m = 5; // 待取出组合的个数
Combination c = new Combination();
List<int[]> list = c.combination(a, m);
c.print(list);
System.out.println("一共" + list.size() + "组!");
}