【leetcode】77. 组合(combinations)(回溯)[中等]

链接

https://leetcode-cn.com/problems/combinations/

耗时

解题:13 min
题解:5 min

题意

给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。

思路

按顺序枚举,当暂存vector内元素数量为 k 时加入结果。

时间复杂度: O ( k ∗ C n k ) O(k*C_n^k) O(kCnk)

AC代码

class Solution {
     
private:
    vector<vector<int>> ans;
    int n, all;
public:
    void dfs(int s, int cnt, vector<int> tmp) {
     
        if(cnt == all) {
     
            ans.push_back(tmp);
            return ;
        }    
        for(int i = s; i <= n; ++i) {
     
            tmp.push_back(i);
            dfs(i+1, cnt+1, tmp);
            tmp.pop_back();
        }
    }
    
    vector<vector<int>> combine(int n, int k) {
     
        this->n = n;
        all = k;
        dfs(1, 0, {
     });
        return ans;
    }
};

你可能感兴趣的:(leetcode,回溯,题解,leetcode,回溯)