發表文章

目前顯示的是 4月, 2014的文章

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; }