78. Subsets

来源:互联网 发布:歌斐资产 知乎 编辑:程序博客网 时间:2024/06/11 22:52

题目

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

分析

求n个数字的所有组合问题,分别传入数组nums,当前下标beg,组合的数字个数n,保存结果的二维向量res,还有暂存当前结果的temp,当n为0时代表找到全部的组合,压入res中,否则如果当前下标beg+n大于nums.size(),代表剩余数字无法构造组合,或者beg到nums的末尾,都直接返回,如果下标位置合法,则分两种情况,一种是当前元素算作组合中的一个元素,只需要从beg+1开始找到n-1的组合即可,另一种是当前元素不算组合数,则弹出当前元素,从beg+1开始找n的组合。

class Solution {public:    void combine(vector<int>& nums,int beg,int n,vector< vector<int> >& res,vector<int>& temp){        if(n==0){            res.push_back(temp);            return ;        }        if(beg+n>nums.size()||beg==nums.size()){            return ;        }               temp.push_back(nums[beg]);        combine(nums,beg+1,n-1,res,temp);        temp.pop_back();        combine(nums,beg+1,n,res,temp);           }    vector<vector<int>> subsets(vector<int>& nums) {        vector< vector< int > > res;        int n=nums.size();                res.push_back(vector<int>());        for(int i=1;i<=n;++i){            vector<int> temp;            combine(nums,0,i,res,temp);        }        return res;    }};


原创粉丝点击