📄 combination.java
字号:
package com.dc.common;
import java.util.Arrays;
public class Combination {
private int[] index;// 用于存储需要组合的数组的下标的成员变量。
private int length;// 表示待组合数组的长度。
private int n;// 组合序列的元素个数
private long numLeft;// 用于存储剩余组合序列个数的成员变量。
private long total;// 用于存储组合序列总数的成员变量。
public Combination(int length) {
this(length, 0);
}
public Combination(int length, int n) {
this.length = length;
this.n = n;
reset();
}
public void reset() {
if (n > length) {
System.out.println("需要组合的个数超出数组元素个数!");
System.exit(1);
}
// 初始化numLeft,开始时numLeft应该为2^n.
//System.out.print();
total = numLeft = (int) Math.pow((double) 2, (double) length);
System.out.println("total值为:"+total);
System.out.println("numLeft值为:"+numLeft);
// 初始化数组index。
index = new int[length];
Arrays.fill(index, 0);
System.out.println("index数组值为");
for(int i:index){
System.out.print(" "+index[i]);
}
System.out.println();
}
private int sum() {
int s = 0;
for (int i : index) {
s += i;
}
System.out.println("s值为:"+s);
return s;
}
public boolean hasMore() {
return numLeft > 0;
}
public int[] getNext() {
index[0] += 1;
for (int i = 0; i < index.length; i++) {
if (index[i] == 2) {
index[i] = 0;
if (i != index.length - 1){
index[i + 1] += 1;
//System.out.println("i当前值为:"+i);
}
}
}
//System.out.println("numLeft当前为:"+numLeft);
numLeft--;
if (this.n != 0) {
if (sum() == this.n)
return index;
else if (hasMore())
return getNext();
}
System.out.println("返回当前的index值为:"+index);
return index;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -