77. Combinations(回溯)

Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.

Example:

Input: n = 4, k = 2
Output:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]

 

 

 

 

class Solution:
    def combine(self, n: int, k: int) -> List[List[int]]:
        res = []
        def backtrack(path,index):
            if len(path) > k:
                return 
            if len(path) == k:
                res.append(path.copy())
                return
            for i in range(index,n+1):
                backtrack(path+[i],i+1)
        backtrack([],1)
        return res
 

 

 

class Solution {
public:
    vector<vector<int>> res;
    void dfs(vector<int>& path, int n, int k, int level) {
        if (path.size() == k) {
            res.emplace_back(path);
            return;
        }
        for (int i = level; i <= n; i++) {
            path.emplace_back(i);
            dfs(path,n,k,i+1);
            path.pop_back();
        }
    }
    vector<vector<int>> combine(int n, int k) {
        vector<int> path;
        dfs(path,n,k,1);
        return res;

    }
};

 

class Solution {
public:
    vector<vector<int>> res;
    vector<int> path;
    void backtrack(vector<int>& path, int k ,int n,int start) {
        if (k == path.size()) {
            res.push_back(path);
            return;
        }
        int fake_n = n - (k - path.size()) + 1;
        //int fake_n = n;
        for (int i = start; i<= fake_n; ++i) {
            path.push_back(i);
            backtrack(path,k,n,i+1);
            path.pop_back();
            
        }
    }
    vector<vector<int>> combine(int n, int k) {
        vector<int> path;
        backtrack(path,k,n,1);
        return res;
    }
};

 

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

 

posted @ 2018-04-21 16:24  乐乐章  阅读(135)  评论(0编辑  收藏  举报