[leetcode]Combinations

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

算法:

思路1: 迭代,k个数就用k层迭代。貌似实现起来也是略有难度的

 

思路2: DFS,不啰嗦

 1 public class Solution {
 2     List<List<Integer>> result = new ArrayList<List<Integer>>();
 3     public List<List<Integer>> combine(int n, int k) {
 4         if(n < k || k < 0 || n < 0) return result;
 5         List<Integer> list = new ArrayList<Integer>();
 6         dfs(list,1, n, k);
 7         return result;
 8     }
 9     private void dfs(List<Integer> list,int start,int n,int left){
10         if(left == 0){
11             result.add(new ArrayList<Integer>(list));
12             return ;
13         }
14         for(int i = start; i <= n ; i++){
15             list.add(i);
16             dfs(list, i + 1, n, left - 1);
17             list.remove(list.size() - 1);
18         }
19     }
20 }

posted on 2014-07-22 15:40  喵星人与汪星人  阅读(277)  评论(0编辑  收藏  举报