代码改变世界

字符串组合

2013-03-15 12:28  java20130722  阅读(300)  评论(0)    收藏  举报

题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有abcabacbcabc

本文整理自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就需要原始方法了。