例题:
题目分析:
求一个集合的幂集我们如果用编程的思维来思考的话想到的有dfs暴力搜索,就是把集合的每一项两种选择进行枚举。除了暴力我们有没有办法直接求解呢?
我们仔细观察一下有n个元素的集合和n-1个元素的集合我们知道数学公式幂集的个数等于2^n次幂,因为每个数都有两个选择。我们发现呢:n和n-1个元素是二倍的关系,那么二倍的关系是偶然嘛?不是的,取决于第n个元素选还是不选。不选就是相当于n-1个元素的幂集,选就是n-1的幂集都放入第n个元素。所有有了二倍的关系。知道了这个,那么我们的实现也十分简单了。
代码c++实现:
class Solution {
public:
vector<vector<int>>ans;
vector<vector<int>> subsets(vector<int>& nums) {
if(nums.size()==0)
return ans;
vector<int>temp;
ans.push_back(temp);
temp.push_back(nums[0]);
ans.push_back(temp);
for(int i=1;i<nums.size();i++)
{
vector<vector<int>>tmp=ans;
for(int j=0;j<tmp.size();j++)
{
tmp[j].push_back(nums[i]);
ans.push_back(tmp[j]);
}
}
return ans;
}
};