题目:
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(参考Work BreakII)的循环递归处理子问题的方法解决。n为循环的次数,k为每次尝试的不同数字。用到了回溯。
代码如下:
2 ArrayList
3 if(n <= 0||n < k)
4 return res;
5 ArrayList
6 dfs(n,k,1,item, res);//because it need to begin from 1
7 return res;
8 }
9 private void dfs(int n, int k, int start, ArrayList
10 if(item.size()==k){
11 res.add(new ArrayList
12 return;
13 }
14 for(int i=start;i<=n;i++){
15 item.add(i);
16 dfs(n,k,i+1,item,res);
17 item.remove(item.size()-1);
18 }
19 }
Reference:http://blog.csdn.net/linhuanmars/article/details/21260217