LeetCode 77グループHERODINGのLeetCodeの道


2つの整数nおよびkが与えられ、1...nのすべての可能なk個の数の組合せが返される.
例:
入力:n=4,k=2出力:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]
解題の構想:またよく知っているdfsを使ってこの問題を解決して、もちろん枝を切ります.各数について、2つの可能性しかなく、選択するか、選択しないか、選択すると長さがKに達すると終了し、直接return、長さがKに足りない直接return、これは剪定の過程であり、コードは以下の通りである.
class Solution {
public:
    vector<int> temp;
    vector<vector<int>> ans;

    void dfs(int cur, int n, int k) {
        //   :temp        [cur, n]       k,          k   temp
        if (temp.size() + (n - cur + 1) < k) {
            return;
        }
        //        
        if (temp.size() == k) {
            ans.push_back(temp);
            return;
        }
        //         
        temp.push_back(cur);
        dfs(cur + 1, n, k);
        temp.pop_back();
        //          
        dfs(cur + 1, n, k);
    }

    vector<vector<int>> combine(int n, int k) {
        dfs(1, n, k);
        return ans;
    }
};