假设我有一个n值的向量,我想得到它的值的不同组合,例如:如果我有vect = [a,b,c]我想要的不同组合是:[a,b ,c],[a,b],[a,c],[b,c],[a],[b],[c]
请注意,例如[a,b]与[b,a]相同,所以我不需要同时保留它们。
答案 0 :(得分:6)
从0
计算到2^vector.size() - 1
。如果循环变量的第i位为1,则在组合中包含vector[i]
。
vector<char> v;
v.push_back('a');
v.push_back('b');
v.push_back('c');
for (int counter = 0; counter < (1 << v.size()); ++counter)
{
vector<char> combination;
for (int i = 0; i < v.size(); ++i)
{
if (counter & (1 << i))
combination.push_back(v[i]);
}
// do something with combination
}
编辑:如果要排除空集,请从1开始计数。
答案 1 :(得分:0)
给你一个伪代码,请把它转换为实际代码。
vector resultVec;
while (!inputVec.empty)
{
char c = inputVec.pop_back();
foreach(one in resultVec)
{
combined = combine c and one;
resultVec.push_back(combined);
}
resultVec.push_back(c);
}
答案 2 :(得分:0)
想象一下,你有一个功能,可以为你做这个。我们称之为combinations
。
如果你要实现自己的版本my_combinations
,你可以通过查看向量中的第一个元素,在向量的其余部分调用combinations
,然后将您的元素与每个组合相结合。
实施此操作后,您可以委托自己的combinations
版本,而不是使用预先存在的版本。