要求:输入一个字符串,输出该字符串的所有组合。如:若字符串为:abc,则应输出:(空集),a、b、c、ab、ac、bc、abc.
思路:考虑到数学中的排列组合知识,我们知道所谓组合即是在字符串中选取某些字符组合在一起,而在二进制中我们可以用0代表未选取某字符,1代表选取了某字符,这样自然可以想到用位运算来实现该过程。位运算结果为1则代表该位被选取。如000代表空集,001代表选取最后一个字符,即c,100代表a。依次类推。
注:注意全排列与组合的不同,具体请参看我的博客:
基于上述思路,代码如下:
#include程序运行结果如下:using namespace std;char str[] = "abcde";void print_subset(int n , int index){ printf("{"); for(int i = 0 ; i < n ; ++i) { if( index&(1<