思路1:
(1)首先对元素进行排序;
(2)按层次减少元素,每一层减少一个元素;
比如刚开始是[1, 2, 3]
然后在第一层分别减少一个元素时1, 2, 3 则结果是[2,3 ], [1, 3], [1, 2]
依次执行,直到该层列表元素个数为0.
class Solution{
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> result;
set<vector<int>> layer_old;
set<vector<int>> layer_new;
sort(nums.begin(), nums.end());
result.push_back(nums);
layer_old.insert(nums);
int length = nums.size();
vector<int> temp;
set<vector<int>>::iterator it;
for(int i = 1; i <= length; i++){
for(it = layer_old.begin(); it != layer_old.end(); it++){
int vector_size = (*it).size();
int delete_index = 0;
for(int m = 0; m < vector_size; m++){
for(int j = 0; j < vector_size; j++){
if(j != delete_index){
temp.push_back((*it)[j]);
}
}
layer_new.insert(temp);
temp.clear();
delete_index++;
}
}
layer_old.clear();
for(it = layer_new.begin(); it != layer_new.end(); it++){
layer_old.insert(*it);
result.push_back(*it);
}
layer_new.clear();
}
return result;
}
};