搜索此博客

2013年1月21日星期一

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],
]


01 public ArrayList<ArrayList<Integer>> combine(int n, int k) {
02     ArrayList<ArrayList<Integer>> results=new ArrayList<ArrayList<Integer>>();
03     ArrayList<Integer> temp=new ArrayList<Integer>();
04     doCombine(results,temp,n,k,1,0);
05     return results;
06 }
07 
08 public void doCombine(ArrayList<ArrayList<Integer>> results, ArrayList<Integer> temp, int n, int k, int start, int level)
09 {
10     if(level==k)
11     {
12         ArrayList<Integer> out=new ArrayList<Integer>();
13         for(int j=0;j<temp.size();j++)
14         {
15             out.add(temp.get(j));
16         }
17         results.add(out);
18     }
19   
20     for(int i=start;i<=n;i++)
21     {
22         temp.add(i);
23         doCombine(results,temp,n, k, i+1,level+1);
24         int size=temp.size();
25         if(size>=1)
26         {
27             temp.remove(size-1);
28         }
29     }
30 }

没有评论:

发表评论