LeetCode-Combinations

来源:互联网 发布:linux dev目录 编辑:程序博客网 时间:2024/05/01 06:48
class Solution {public:    vector<vector<int> > combine(int n, int k) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        vector<vector<int> > combination;        vector<int> vec(k);        if (k > 0 && k <= n)        {            dfs(vec, combination, n, k, 0, 1);            }        return combination;    }        void dfs(vector<int> &vec, vector<vector<int> > &combination, int n, int k,        int dep, int start)    {        if (dep == k)        {            combination.push_back(vec);        }        else        {            for (int i = start; i <= n; ++i)            {                vec[dep] = i;                dfs(vec, combination, n, k, dep + 1, i + 1);            }        }    }};


更简单点的写法:

class Solution {public:    vector<vector<int> > subsets(vector<int> &S) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        sort(S.begin(), S.end());        vector<vector<int> > sets;        vector<int> set;        sets.push_back(set);        dfs(0, S.size(), S.size(), 0, set, sets, S);        return sets;    }        void dfs(int dep, int maxDep, int n , int start, vector<int> &set,         vector<vector<int> > &sets, vector<int> &S)    {        if (dep < maxDep)        {            for (int i = start; i < n; ++i)            {                set.push_back(S[i]);                sets.push_back(set);                dfs(dep + 1, maxDep, n, i + 1, set, sets, S);                set.pop_back();            }        }    }};