递归方法
#include<iostream>
#include<stdio.h>
#include<vector>
using namespace std;
void dfs(int num,vector<vector <int> > &ans,vector<int>vec,vector<int>nums);
vector<vector<int> > subsets(vector<int>& nums) {
vector<vector<int> > ans;
vector<int> vec;
dfs(0,ans,vec,nums);
return ans;
}
void dfs(int num,vector<vector <int> > &ans,vector<int>vec,vector<int>nums)
{
if(num == nums.size())
{
ans.push_back(vec);
}
else if(num>nums.size()){
return;
}
dfs(num+1,ans,vec,nums);
vec.push_back(nums[num]);
dfs(num+1,ans,vec,nums);
vec.pop_back();
}
int main()
{
int a[3]= {1,2,3};
vector<int> src(a,a+3);
vector<vector<int> > res=subsets(src);
for(int i=0; i<res.size(); i++)
{
for(int j=0; j<res[i].size(); j++)
{
cout<<res[i][j]<<" ";
}
puts("");
}
}
二进制方法
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
int size=nums.size(); //数组大小
vector<vector<int>> res;
unsigned int map=0;
vector<int> tmp;
int end=1<<size; //停止边界
while(map<end)
{
for(int i=0;i<size;i++)
if((1<<i)&map) tmp.push_back(nums[i]); //寻找要加入的下标
res.push_back(tmp);
tmp.clear();
map++;
}
return res;
}
};
作者:rjs
链接:https://leetcode-cn.com/problems/subsets/solution/c-0msji-bai-100-89mji-bai-9215-wei-yun-suan-by-rjs/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。