LeetCode系列78—子集

题意

78. 子集

题解

方法一:迭代法实现子集枚举

class Solution {
    
    
public:
    vector<int> t;
    vector<vector<int>> ans;

    vector<vector<int>> subsets(vector<int>& nums) {
    
    
        int n = nums.size();
        for (int mask = 0; mask < (1 << n); ++mask) {
    
    
            t.clear();
            for (int i = 0; i < n; ++i) {
    
    
                if (mask & (1 << i)) {
    
    
                    t.push_back(nums[i]);
                }
            }
            ans.push_back(t);
        }
        return ans;
    }
};

方法二:递归法实现子集枚举

class Solution {
    
    
public:
    vector<int> t;
    vector<vector<int>> ans;

    void dfs(int cur, vector<int>& nums) {
    
    
        if (cur == nums.size()) {
    
    
            ans.push_back(t);
            return;
        }
        t.push_back(nums[cur]);
        dfs(cur + 1, nums);
        t.pop_back();
        dfs(cur + 1, nums);
    }

    vector<vector<int>> subsets(vector<int>& nums) {
    
    
        dfs(0, nums);
        return ans;
    }
};

参考

子集

猜你喜欢

转载自blog.csdn.net/younothings/article/details/120070024