LeetCode 78 子集 HERODING的LeetCode之路

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]

解题思路:
同样是一道回溯的问题,首先对数组进行排列,再放入dfs中遍历,对于每个数,可以选择,也可以不选择,不选择直接跳过,选择就放入res中并继续往下,记得要有回溯的过程,代码如下:

class Solution {
    
    
private:
    vector<vector<int>> ans;
    vector<int> res;
public:
    void dfs(vector<int> nums, int index){
    
    
        if(index == nums.size()){
    
    
            ans.emplace_back(res);
            return;
        }
        //不选择当前的数字
        dfs(nums, index + 1);
        //选择当前的数字
        res.emplace_back(nums[index]);
        dfs(nums, index + 1);
        //回溯体现
        res.pop_back();
    }


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

猜你喜欢

转载自blog.csdn.net/HERODING23/article/details/108688949