题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入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就需要原始方法了。