Skip to content

Latest commit

 

History

History
executable file
·
66 lines (62 loc) · 1.34 KB

0077. Combinations.md

File metadata and controls

executable file
·
66 lines (62 loc) · 1.34 KB

77. Combinations, medium

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 {
private:
     void comb(int n, int k, int start, vector<vector<int>>& res, vector<int>& v) {
        if (k == 0) {
            res.push_back(v);
            return;
        }
        for (int i = start; i <= n - k + 1; i++) {
            v.push_back(i);
            comb(n, k-1, i+1, res, v);
            v.pop_back();
        }
    }
public:
    vector<vector<int>> combine(int n, int k) {
        vector<vector<int>> res;
        vector<int> v;
        comb(n, k, 1, res, v);
        return res;
    }
};
class Solution {
private:
    vector<vector<int>> comb(int n, int k, int start, vector<int> pre) {
        vector<vector<int>> res;
        for (int i = start; i <= n-k+1; i++){
            vector<int> v(pre);
            v.push_back(i);
            if (k == 1) {
                res.push_back(v);
            }
            else {
                auto r = comb(n, k-1, i+1, v);
                res.insert(res.end(), r.begin(), r.end());
            }
        }
        return res;
    }
public:
    vector<vector<int>> combine(int n, int k) {
        return comb(n, k, 1, vector<int>());
    }
};