直接dfs,注意采用vector的erase和remove
/**
* @author johnsondu
* @time 20:27 8th Oct 2015
* @type dfs
* @url https://leetcode.com/problems/subsets/
* @status Accepted
*/
class Solution {
public:
void dfs(int idx, vector<int> &tmp, vector<vector<int>> &ans, vector<int>& nums)
{
sort(tmp.begin(), tmp.end());
ans.push_back(tmp);
for(int j = idx; j < nums.size(); j ++) {
tmp.push_back(nums[j]);
dfs(j + 1, tmp, ans, nums);
tmp.erase(remove(tmp.begin(),tmp.end(),nums[j]),tmp.end());
}
}
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> ans;
vector<int> tmp;
ans.push_back(tmp);
if(nums.size() == 0) return ans;
for(int i = 0; i < nums.size(); i ++) {
tmp.push_back(nums[i]);
dfs(i + 1, tmp, ans, nums);
tmp.erase(remove(tmp.begin(),tmp.end(),nums[i]),tmp.end());
}
return ans;
}
};