leetcode 子集 中等

 

 

递归:每个数放或者不放,都递归一次

class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        vector<int> tmp;
        solve(nums, tmp, 0);
        return ans;
    }

    void solve(vector<int> &nums, vector<int> &tmp, int l) {
        if(l == nums.size()) {
            ans.emplace_back(tmp);
            return ;
        }
        tmp.emplace_back(nums[l]);
        solve(nums, tmp, l + 1);
        tmp.pop_back();
        solve(nums, tmp, l + 1);
    }
    vector<vector<int>> ans;
};

 

还有一个和全排列比较像的写法:

// 这样写是一样的。。。这样写就和全排列比较像
class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        vector<int> tmp;
        solve(nums, tmp, 0);
        return ans;
    }

    void solve(vector<int> &nums, vector<int> &tmp, int l) {
        if(l == nums.size()) {
            ans.emplace_back(tmp);
            return ;
        }
        for(int i = l; i < nums.size(); ++ i) {
            tmp.emplace_back(nums[i]);
            solve(nums, tmp, i + 1);
            tmp.pop_back();
        }
        solve(nums, tmp, nums.size());  // 注意这一句不要漏了, tmp.pop_back() 之后还要执行一次才对
    }
    vector<vector<int>> ans;
};

 

posted @ 2021-07-29 21:13  rookie_Acmer  阅读(29)  评论(0)    收藏  举报