详细思路

枚举每个数,要这个数,或者不要这个数,每一次都要放进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开始,只能向右
posted on 2021-07-30 11:58  offer快到碗里来~  阅读(79)  评论(0)    收藏  举报