class Solution {
public:
vector<vector<int> > subsets (vector<int> &nums) {
vector<vector<int> > results;
if (nums.size() == 0) {
results.push_back(vector<int>());
return results;
}
sort(nums.begin(), nums.end());
vector<int> current;
dsfHelper(nums, 0, current, results);
return results;
}
void dsfHelper(vector<int> &nums, int index, vector<int> & current, vector<vector<int>> &results) {
results.push_back(current);
for (int i = index; i < nums.size(); i++) {
current.push_back(nums[i]);
dsfHelper(nums, i+1, current, results);
current.pop_back();
}
}
};