Combinations

DFS

 1 public class Solution {
 2     public ArrayList<ArrayList<Integer>> combine(int n, int k) {
 3         ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
 4         if(k == 0 || n == 0)
 5             return res;
 6             
 7         ArrayList<Integer> output = new ArrayList<Integer>();
 8         generate(1, n, k, output, res);
 9         return res;
10     }
11     
12     public void generate(int depth, int n, int k, ArrayList<Integer> output, ArrayList<ArrayList<Integer>> res){
13         if(output.size() == k){
14             ArrayList<Integer> tmp = new ArrayList<Integer>();
15             tmp.addAll(output);
16             res.add(tmp);
17             return;
18         }
19         for(int i = depth; i <= n; i++){
20             output.add(i);
21             generate(i+1, n , k, output, res);
22             output.remove(output.size()-1);
23         }
24     }
25 }

 

Recursion

public class Solution {
    public ArrayList<ArrayList<Integer>> combine(int n, int k) {
        return helper(1, n, k);
    }

    private ArrayList<ArrayList<Integer>> helper(int start, int end, int k) {
        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
        ArrayList<Integer> re = new ArrayList<Integer>();
        if (end - start + 1 < k || k <= 0) {
            result.add(re);
            return result;
        }
        // add all to the re
        if (end - start + 1 == k) {
            for (int i = start; i <= end; i++) {
                re.add(i);
            }
            result.add(re);
            return result;
        }
        // include start
        ArrayList<ArrayList<Integer>> tmp = helper(start + 1, end, k - 1);
        for (ArrayList<Integer> r : tmp) {
            re = new ArrayList<Integer>(r);
            re.add(0, start);
            result.add(re);
        }
        // not inclued start
        ArrayList<ArrayList<Integer>> tmp2 = helper(start + 1, end, k);
        result.addAll(tmp2);
        return result;
    }
}

 

posted @ 2014-02-02 02:42  Razer.Lu  阅读(215)  评论(0)    收藏  举报