Thursday, July 17, 2014

Combinations

Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.
For example,
If n = 4 and k = 2, a solution is:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]


DFS: 
public class Solution {
    //Time: O(n^k)
    public ArrayList<ArrayList<Integer>> combine(int n, int k) {
        ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
        ArrayList<Integer> tmp = new ArrayList<Integer>();
        combineHelp(res, tmp, n, k, 1);
        return res;
    }
    
    private void combineHelp(ArrayList<ArrayList<Integer>> res, ArrayList<Integer> tmp,
                             int n, int k, int index) {
        if (tmp.size() == k) {
            res.add(new ArrayList<Integer>(tmp));
            return;
        }          
        
        for (int i = index; i <= n; i++) {
            tmp.add(i);
            combineHelp(res, tmp, n, k, i + 1);
            tmp.remove(tmp.size() - 1);
        }
    }
}

No comments:

Post a Comment