Java 列舉法,C n 選 k (迭代版)

public List<List<Integer>> selectSubsetKFromSetN(int subsetK, int setN) {
List<List<Integer>> combinations = new ArrayList<List<Integer>>();
Integer[] order = new Integer[subsetK + 1];
order[0] = -1;
int curIdx = subsetK;
boolean flag = true;
for (int i = 1; i < order.length; i++)
order[i] = i - 1;
while (order[0] == -1) {
if (flag) {
List<Integer> kList = new ArrayList<>();
for (int i = 1; i < order.length; i++)
kList.add(order[i]);
combinations.add(kList);
flag = false;
}
order[curIdx]++;
if (order[curIdx] == setN) {
curIdx--;
continue;
}
if (curIdx < subsetK) {
order[curIdx + 1] = order[curIdx];
curIdx++;
continue;
}
if (curIdx == subsetK) {
flag = true;
}
}
return combinations;
}

留言

這個網誌中的熱門文章

慢性胃炎

禪者的初心-讀書心得

電影心得-逆轉人生