leetcode 77. Combinations

来源:互联网 发布:为什么黑腾讯游戏知乎 编辑:程序博客网 时间:2024/06/18 18:09

题目如下:

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

For example,
If n = 4 and k = 2, a solution is:

[  [2,4],  [3,4],  [2,3],  [1,2],  [1,3],  [1,4],]
递归代码如下:

class Solution {public:    vector<vector<int> > combine(int n, int k) {        vector<vector<int> > rslt;        vector<int> path(k, 0);        combine(n, k, rslt, path);        return rslt;    }private:    void combine(int n, int k, vector<vector<int> > &rslt, vector<int> &path) {        if (k == 0) {            rslt.push_back(path);            return;        }        for (int i = n; i >= 1; i--) {            path[k - 1] = i;            combine(i - 1, k - 1, rslt, path);        }    }};

78. Subsets


Given a set of distinct integers, nums, return all possible subsets.

Note: The solution set must not contain duplicate subsets.

For example,
If nums = [1,2,3], a solution is:

[  [3],  [1],  [2],  [1,2,3],  [1,3],  [2,3],  [1,2],  []]

class Solution {public:    vector<vector<int>> subsets(vector<int>& nums) {        sort(nums.begin(), nums.end());        vector<vector<int>> subs;        vector<int> sub;          genSubsets(nums, 0, sub, subs);        return subs;     }    void genSubsets(vector<int>& nums, int start, vector<int>& sub, vector<vector<int>>& subs) {        subs.push_back(sub);        for (int i = start; i < nums.size(); i++) {            sub.push_back(nums[i]);            genSubsets(nums, i + 1, sub, subs);            sub.pop_back();        }    }};