日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言字母的组合,C语言求字母的全部组合

發布時間:2024/3/13 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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语言求字母的全部组合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。