[Leetcode]#78 Subsets

来源:互联网 发布:单片机软件工程师岗位 编辑:程序博客网 时间:2024/05/21 14:59

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

Note:

Elements in a subset must be in non-descending order.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],
[]
]

//#78 Subsets//8ms 89.70%class Solution {public:    void selectionSort(vector<int>& nums)    {        if(nums.empty() || nums.size() == 1) return;        for(unsigned int i=0; i<nums.size(); i++)        {            unsigned int p(i);            for(unsigned int j=i+1; j<nums.size(); j++)            {                if(nums[p] > nums[j])                {                    p = j;                }            }            if(p != i)            {                int tmp(nums[i]);                nums[i] = nums[p];                nums[p] = tmp;            }        }        return;    }    vector< vector<int> > subsets(vector<int>& nums)     {        vector <vector<int> > result;        vector<int> empty_v;        result.push_back(empty_v);        if(nums.empty()) return result;        selectionSort(nums);        for(unsigned int i = 1; i < nums.size() + 1; i ++)        {   //i, the number of elements in sub array            for(unsigned int j = 0; j < nums.size() - i + 1; j ++)            {   //j, the starting point of sub array                vector<int> v;                push_vector(result, v, j, i, nums);            }        }        return result;    }    void push_vector(vector <vector<int> >& result, vector<int> v, int p, int number_left, vector<int>& nums)    {        v.push_back(nums[p]);        number_left --;        if(number_left != 0)        {            for(unsigned int j = p + 1; j < nums.size() - number_left + 1; j ++)            {                push_vector(result, v, j, number_left, nums);            }        }        else        {            //cout << "Pushing a combination back...\n";            //for(unsigned int i=0; i<v.size(); i++)            //{            //  cout << v[i];            //}            //cout << endl;            result.push_back(v);        }        return;    }};
0 0
原创粉丝点击