78. 子集(dfs)(LeetCode)

78. 子集

二进制

class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        int n = nums.size();
        vector<vector<int>> ans;
        for(int i = 0; i < 1 << n; ++i){
            vector<int> path;
            for(int j = 0; j < n; ++j){
                if(i >> j & 1) path.push_back(nums[j]);
            }
            ans.push_back(path);
        }
        return ans;
    }

    void dfs(int n, int k, int st){

    }
};

递归

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

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

        dfs(nums, 0);

        return ans;
    }

    void dfs(int n, int k, int st){

    }
};
posted @ 2025-03-11 14:59  awei040519  阅读(5)  评论(0)    收藏  举报