LeetCode 78.Subsets

来源:互联网 发布:cad制作软件 编辑:程序博客网 时间:2024/06/05 22:57

Description:
Given a set of distinct integers, nums, return all possible subsets (the power set).

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],  []]

该题是比较经典的排列组合中的组合问题。我的解法是通过递归的方式求解。想到用递归是因为该问题可以分解成子问题求解:假设一共有n个数,要求一个m组合,那么求解的过程可以分解为首先从n个数中取一个数,然后求剩下的n-1个数的m-1组合。
代码如下:

class Solution {public:    vector<vector<int>> subsets(vector<int>& nums) {        vector<vector<int>> result;        result.push_back(vector<int>());        int size = nums.size();        vector<int> subset;        for(int i = 1; i <= size; i++) {            vector<int> subset;            generate(result, subset, i, 0, size, nums);        }        return result;    }    void generate(vector<vector<int>> & result, vector<int>& subset, int count, int index, int size, vector<int>& nums) {        if(count == 0) {            result.push_back(subset);            return;        }        for(int i = index; i <= size - count; i++) {            subset.push_back(nums[i]);            generate(result, subset, count - 1, i + 1, size, nums);            subset.pop_back();        }    }};
原创粉丝点击