子集

子集

 

 详细思路

枚举每个数,要这个数,或者不要这个数,每一次都要放进ans,如果到了最大的,要了后就返回,begin+1防止只是交换和重复拿一个数   精确定义 begin
class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        vector<vector<int>>ans;
        vector<int>ans1;
        dfs(0,ans,ans1,nums);
        return ans;
    }
    void dfs(int begin,vector<vector<int>>&ans,vector<int>&ans1,vector<int>&nums){
        ans.push_back(ans1);
        if(ans1.size()==nums.size())return ;
        for(int i=begin;i<nums.size();i++){
            ans1.push_back(nums[i]);
            dfs(i+1,ans,ans1,nums);
            ans1.pop_back();
        }
    }
};
踩过的坑             dfs(i+1,ans,ans1,nums); begin从i+1开始,只能向右
上一篇:子集II


下一篇:全排列