字符串组合
2013-03-15 12:28 java20130722 阅读(304) 评论(0) 收藏 举报题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。
本文整理自http://zhedahht.blog.163.com/blog/static/2541117420114172812217/
一般的做法请看原文链接。本文把评论中提到的方法整理出来,思路如下:
模拟2进制加法器,某一个为1,则取对应的字符,若为0则不取,就能够实现字符组合。
设有n个字符。int num 从 1 自增到 2^n -1, 将num右移i位,跟1做按位&操作,即可判断第i个字符取还是不取。
int main(int argc, char** args) {
//char *str = "abc";
//combination(str);
string str = "abc";
int N = str.size();
int num = pow(2, N);
for (int i = 1; i < num; ++i){
for (int j = 0; j < N; ++j) {
if ((i >> j) & 1) {
cout << str[j];
}
}
cout << "=======" << endl;
}
return 0;
}
还存在的问题的是符数组的长度<32的话这个办法还是很不错的,如果>32就需要原始方法了。
浙公网安备 33010602011771号