class Solution {
public:
vector<vector<int>> result;
vector<vector<int>> subsets(vector<int>& nums) {
vector<int> cur;
vector<bool> visited(nums.size(), 0);
result.push_back(cur);
dfs(cur, visited, nums, 0);
return result;
}
void dfs(vector<int> cur, vector<bool> visited, vector<int> nums, int base) {
for (int i=base; i<nums.size(); i++) {
if (!visited[i]) {
visited[i] = true;
cur.push_back(nums[i]);
result.push_back(cur);
dfs(cur, visited, nums, i+1);
cur.pop_back();
visited[i] = false;
}
}
}
};