字符串组合——位运算
1. 题目描述
输入一个字符串,输入所有组合。例如:abc, 输出a, b, c, ab, ac, bc, abc。
2. 位运算求解
一个长度为n的字符串,它的组合有2^n-1中情况,我们用1 ~ 2^n-1的二进制来表示,每种情况下输出当前位等于1的字符。
如下图:
这种思路特别简洁巧妙,以后要经常想起来位运算,之前也用到过~
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
void Combination(char *str)
{
int len=strlen(str);
for(int cur=1; cur<(1<<len); cur++) //遍历所有的情况,1<<len就等于2^len,遍历1 ~ 2^len-1
{
for(int j=0; j<len; j++) //遍历所有的字符
{
if(cur & (1<<j)) //判断哪一位为1,即输出该位
cout<<str[j];
}
cout<<endl; //一种情况结束
}
}
int main()
{
char str[10];
cout<<"The original string is: ";
cin>>str;
cout<<endl;
cout<<"After combination, the string is: "<<endl;
Combination(str);
return 0;
}
注意程序中的位运算,这个很重要!