78. 子集
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>>ans;
vector<int>temp;
ans.push_back(temp);
for(int i = 0;i < nums.size();i++){
int len = ans.size();
for(int j = 0;j < len;j++){
temp.clear();
temp = ans[j];
temp.push_back(nums[i]);
ans.push_back(temp);
}
}
return ans;
}
};
解题思路:对于一个集合来说,子集的个数是2^n。而2^n的由来就是对于n个元素,每一个元素都可以选或者不选两种情况,而该题则是模拟这个选与不选的情况。一开始是一个空的子集,然后遍历nums数组,对于每一个数都进行选与不选的模拟,对于案例来说:
1、{ [ ] }一开始是一个空集
2、{ [ 1 ],[ ] } 然后选择1则变成[ 1 ],不选择1则是[ ]空集
3、{ [ ] , [ 1 ] , [ 1 , 2 ] , [ 2 ]}然后对于上面的集合来说选择2与不选择2则变成这样,即本身然后还有添加2之后的子集
4、{ [ ] , [ 1 ] , [ 1 , 2 ] , [ 2 ] , [ 3 ] , [ 1 , 3] , [ 1 , 2 , 3 ] , [ 2 , 3 ]}然后是选择和不选择3,得到最后的结果
上面的两个循环就是这个的模拟过程。