78. Subsets

来源:互联网 发布:股票数据统计软件 编辑:程序博客网 时间:2024/05/18 02:44

Subsets

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

解析

思路一:

求幂集问题

刚开始没有一点思路,但是我刚刚做了Combinations,可以说Combinations是本题的一个子过程。原因是,组合个数从0到n遍历一遍,就是本题的结果了。

思路一代码

class Solution {public:    vector<vector<int>> subsets(vector<int>& nums) {        sort(nums.begin(),nums.end());        this->n=nums.size();        //k:0~n        for(int i=0;i<=nums.size();i++){            this->k=i;            com(0,0,nums);        }        return vvi;    }private:    void com(int j,int t,vector<int>& nums){        if(j==k){            vvi.push_back(vi);        }        else{            for(int i=t;i<n;i++){                vi.push_back(nums[i]);                com(j+1,i+1,nums);                vi.pop_back();            }        }    }private:    vector<vector<int>> vvi;    vector<int> vi;    int k;    int n;};

代码二

对思路一进行一些改进。基本思想不变

class Solution {public:    vector<vector<int>> subsets(vector<int>& nums) {        sort(nums.begin(),nums.end());        com(0,nums);        return vvi;    }private:    void com(int pos,vector<int>& nums){        vvi.push_back(vi);        if(pos>=nums.size()) return ;        for(int i=pos;i<nums.size();i++){            vi.push_back(nums[i]);            com(i+1,nums);            vi.pop_back();        }    }private:    vector<vector<int>> vvi;    vector<int> vi;};
0 0
原创粉丝点击