题目
输入一个字符串,输出该字符串中字符的所有组合。
分析
假设给定一字符串“abc”,则其所有组合方式为: a, b, ab, c, ac, bc, abc共七种(2^n - 1)种组合方式,可以利用位操作来简化题目,即给所有输出方式进行编号(1 ~ 2^n-1),对于本题目来说即:
0 0 1 --> a
0 1 0 --> b
0 1 1 --> ab
1 0 0 --> c
1 0 1 --> ac
1 1 0 --> bc
1 1 1 --> abc
代码
void printAllCombination(string s)
{
auto len = s.size();
auto comb_count = 1 << len;
for(int i = 1; i < comb_count; ++i)
{
for(int j = 0; j < len; ++j)
if(i & (1 << j)) cout << s[j];
cout << " ";
}
}