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:
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 }
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 }
没有评论:
发表评论