78. 子集

发布时间:2023年12月27日

给你一个整数数组?nums?,数组中的元素?互不相同?。返回该数组所有可能的子集(幂集)。

解集?不能?包含重复的子集。你可以按?任意顺序?返回解集。

示例 1:

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

示例 2:

输入:nums = [0]
输出:[[],[0]]

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10
  • nums?中的所有元素?互不相同

?

?void dfc(vector<int>& nums,set<vector<int>>&ret,vector<bool>& visited,int index)

? ? {

? ? ? ? vector<int>vecTmp;

? ? ? ? for(int i=0;i<visited.size();i++)

? ? ? ? {

? ? ? ? ? ? if(visited[i]==true)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? vecTmp.push_back(nums[i]);

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? if(vecTmp.size()>0)

? ? ? ? {

? ? ? ? ? ? ret.insert(vecTmp);

? ? ? ? }

? ? ? ? for(int i=index;i<nums.size();i++)

? ? ? ? {

? ? ? ? ? ? if(visited[i]==true)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? continue;

? ? ? ? ? ? }

? ? ? ? ? ? visited[i]=true;

? ? ? ? ? ? dfc(nums,ret,visited,i);

? ? ? ? ? ? visited[i]=false;

? ? ? ? }

? ? }

? ? vector<vector<int>> subsets(vector<int>& nums) {

? ? ? ? set<vector<int>>ret;

? ? ? ? vector<bool> visited(nums.size(),false);

? ? ? ? dfc(nums,ret,visited,0);

? ? ? ? vector<vector<int>>vec;

? ? ? ? for(auto it:ret)

? ? ? ? {

? ? ? ? ? ? vec.push_back(it);

? ? ? ? }

? ? ? ? vec.push_back(vector<int>());

? ? ? ? return vec;

? ? }

文章来源:https://blog.csdn.net/yinhua405/article/details/135235530
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。