给定一个不包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
讲解:
1.首先补充一下有关vector的知识,见我的另一篇https://mp.csdn.net/postedit/84297312
2.代码的整体思路就是:逐个加入nums中的元素,每加入一个元素,就对output现有的所有数组,加入该元素,放入output末尾,nums中有多少元素就迭代多少次,由于该题目给的数组不包含重复元素,因此可以这样做。
可以用递推的思想,观察S=[], S =[1], S = [1, 2] 时解的变化。
可以发现S=[1, 2] 的解就是 把S = [1]的所有解末尾添上2,然后再并上S = [1]里面的原有解。因此可以定义vector<vector<int> > 作为返回结果output, 开始时什么都没有,第一步放入一个空的vecotr<int>,然后这样迭代n次,n等于nums元素的数量,每次更新output内容,最后返回output。
代码:
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> output;
vector<int> subset;
int length=nums.size();
output.push_back(subset);
int current=0;
int output_size;
while(current<length){
output_size=output.size();
for(int i=0;i<output_size;i++){
vector<int> newinsert=output[i];
newinsert.insert(newinsert.end(),nums[current]);
output.push_back(newinsert);
}
current++;
}
return output;
}
};
结果:
这样的算法时间复杂度大约为O(n^2),不是很好。欢迎提更好的方法。