C语言字母的组合,C语言求字母的全部组合
使用的遞歸的方法:既然是組合,則順序不要求順序了。
主要原理就是從第一個字符開始,分兩種情況:1.留下此字符;2.去除此字符。 再對剩下的字符求組合。
然后再第二個字符,分兩種情況,再對剩下的字符求組合
#include
#include
#include
template
inline void swap(T &a , T &b)
{
T tmp;
tmp = a;
a = b;
b = tmp;
}
void doPrintAllCombination(char *str , int begin , int end)
{
if(begin == end) {
char tmp;
if(end != 0) { //i要此字符時
tmp = str[end];
str[end] = '\0';
printf("%s\n",str);
str[end] = tmp;
}
tmp = str[end+1]; //不要此字符
str[end+1] = '\0';
printf("%s\n" , str);
str[end+1] = tmp;
return;
}
//第二種情況,去除此字符
swap(str[begin],str[end]);
doPrintAllCombination(str , begin , end-1);
swap(str[begin] , str[end]);
//第一種情況,留下此字符
doPrintAllCombination(str , begin+1 , end);
}
void printAllCombination(char *str)
{
doPrintAllCombination(str , 0 , strlen(str)-1);
}
int main(int argc , char *argv[])
{
if(argc != 2) {
printf("usage: %s \n" , argv[0]);
return -1;
}
char *str = (char*)malloc(strlen(argv[1]) + 1);
strcpy(str , argv[1]);
printf("orignate string : %s\n" , str);
printAllCombination(str);
free(str);
return 0;
}
結果:
orignate string : abc
b
c
cb
a
ac
ab
abc
結果中有些字符的順序改變了,如cb ,,按正常順序可能是bc,,,
這是因為我的這個程序的空間復雜度為O(1)
如果你要求產生的組合與原始字符的順序一致,,則可以使用mask代替,,標記使用不使用此字符。此時空間復雜度為O(N)
反正時間復雜度都為O(N)
總結
以上是生活随笔為你收集整理的C语言字母的组合,C语言求字母的全部组合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android开发 环境搭建(ubunt
- 下一篇: Junit 的 @RunWith():R