public ArrayList<ArrayList<Integer>> combine(int n, int k) { ArrayList<ArrayList<Integer>> resSet = new ArrayList<ArrayList<Integer>>(); if (k == 1) { for (int i=1; i<=n; ++i) { ArrayList<Integer> res = new ArrayList<Integer>(); res.add(i); resSet.add(res); } return resSet; } for (int i=n; i>=k; --i) { ArrayList<ArrayList<Integer>> results = combine(i-1, k-1); for (ArrayList<Integer> res : results) { res.add(i); resSet.add(res); } } return resSet; }
public ArrayList<ArrayList<Integer>> combine(int n, int k) { ArrayList<Integer> candidates = new ArrayList<Integer>(); ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); if (n == 0) return result; for (int i = 0; i < n; i++) candidates.add(i+1); if (k >= n) result.add(candidates); else combineHelper(k, 0, candidates, new ArrayList<Integer>(), result); return result; } public void combineHelper(int k, int start, ArrayList<Integer> candidates, ArrayList<Integer> curSol, ArrayList<ArrayList<Integer>> result) { if (curSol.size() == k) { result.add(new ArrayList<Integer> (curSol)); return; } if (curSol.size() < k) { for (int i = start; i < candidates.size(); i++) { curSol.add(candidates.get(i)); combineHelper(k, i+1, candidates, curSol, result); // bug: not start+1 curSol.remove(curSol.size() - 1); } } return; }
2
最新推荐文章于 2024-09-19 11:52:38 发布