思路1:深度优先遍历,找到递归规律,进行递归,选择每个元素,分为2种情况,当前元素选择或者不选择
递归树可以自己画一下,具体代码如下:
class Solution {
public:
// 深度优先遍历处理
vector<vector<int>> subsets1(vector<int>& nums) {
vector<vector<int>> res;
if(nums.empty()) return res;
vector<int> temp;
dfs(res,nums,temp,0);
return res;
}
void dfs(vector<vector<int>>& ans,vector<int> &nums,vector<int> &temp,int index){
if(index==nums.size()){
ans.push_back(temp);
//temp.clear();
return;
}
//选择当前元素
temp.push_back(nums[index]);
dfs(ans,nums,temp,index+1);
//不选择当前元素
temp.pop_back();
dfs(ans,nums,temp,index+1);
}
};
思路2:层序遍历,每次加入一个元素就扩充res的长度,直到所有元素添加完毕。
代码如下:
class Solution {
public:
//层序遍历
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int> > res(1);
for(int i=0;i<nums.size();i++){
int cnt=res.size();
for(int j=0;j<cnt;j++){
vector<int> tmp=res[j];
tmp.push_back(nums[i]);
res.push_back(tmp);
}
}
return res;
}
};