编写一个方法,返回某集合的所有子集。
2014-02-08 22:23
260 查看
简单构造法
n=0:{}
n=1:{}、{a1}
n=2:{}、{a1}、{a2}、{a1,a2}
求P(n),先计算P(n-1),复制一份,在每个集合中加入an。
C++实现:
#include <set>
#include <vector>
using namespace std;
vector<set<int> > getSubsets(const set<int> &iset)
{
vector<set<int> > allsubsets;
allsubsets.push_back(set<int>());
for(set<int>::const_iterator i = iset.begin(); i != iset.end(); ++i)
{
int item = *i;
vector<set<int> > moresubsets;
for(vector<set<int> >::iterator iter = allsubsets.begin();
iter != allsubsets.end();
++iter)
{
set<int> newsubset(*iter);
newsubset.insert(item);
moresubsets.push_back(newsubset);
}
allsubsets.insert(allsubsets.end(), moresubsets.begin(), moresubsets.end());
}
return allsubsets;
}
n=0:{}
n=1:{}、{a1}
n=2:{}、{a1}、{a2}、{a1,a2}
求P(n),先计算P(n-1),复制一份,在每个集合中加入an。
C++实现:
#include <set>
#include <vector>
using namespace std;
vector<set<int> > getSubsets(const set<int> &iset)
{
vector<set<int> > allsubsets;
allsubsets.push_back(set<int>());
for(set<int>::const_iterator i = iset.begin(); i != iset.end(); ++i)
{
int item = *i;
vector<set<int> > moresubsets;
for(vector<set<int> >::iterator iter = allsubsets.begin();
iter != allsubsets.end();
++iter)
{
set<int> newsubset(*iter);
newsubset.insert(item);
moresubsets.push_back(newsubset);
}
allsubsets.insert(allsubsets.end(), moresubsets.begin(), moresubsets.end());
}
return allsubsets;
}
相关文章推荐
- 请编写一个方法,返回某集合的所有非空子集。
- 编写一个方法,返回某集合的所有子集
- 两种方法寻找一个集合的所有子集
- Java 通过位运算求一个集合的所有子集方法
- 编写一个方法,返回某字符串的所有排列组合。
- 编写一个方法,输入DOM节点,返回包含所有父节点的一个数组
- 编写一个方法,返回100个互不重复,且顺序被打乱的集合
- 给定一个可能包含重复的整数的集合,S返回所有可能的子集。
- 输出一个集合的所有子集,从长到短
- 求一个集合所有可能的子集
- 编写一个递归方法,返回数N的二进制表示中1的个数
- 阿里巴巴 Java 开发手册:asList 的返回对象是一个 Arrays 内部类,并没有实现集合的修改方法
- 返回某集合的所有子集
- (用二进制的思路)给定一个集合S,打印出集合所有的子集
- [CareerCup 8.3] 求一个集合的所有子集
- 求一个集合的所有子集
- 前台使用ajax 调用action方法,返回一个对象List集合的json
- 给定一个集合(字符数组),打印出它的所有子集
- [置顶] 求一个集合的所有子集问题
- 使用jQuery匹配文档中所有的li元素,返回一个jQuery对象,然后通过数组下标的方式读取jQuery集合中第1个DOM元素,此时返回的是DOM对象,然后调用DOM属性innerHTML,读取该元素 包含的文本信息