全排列 (C语言实现)
生活随笔
收集整理的這篇文章主要介紹了
全排列 (C语言实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://blog.csdn.net/v_july_v/article/details/6879101
轉自:http://blog.csdn.net/fanzitao/article/details/7879027
題目:輸入一個字符串,打印出該字符串中字符的所有排列。例如輸入字符串abc,則輸出由字符a、b、c 所能排列出來的所有字符串
abc、acb、bac、bca、cab 和cba。
分析:此題最初整理于去年的微軟面試100題中第53題,第二次整理于微軟、Google等公司非常好的面試題及解答[第61-70題] 第67題。無獨有偶,這個問題今年又出現于今年的2011.10.09百度筆試題中。ok,接下來,咱們先好好分析這個問題。
一、遞歸實現
從集合中依次選出每一個元素,作為排列的第一個元素,然后對剩余的元素進行全排列,如此遞歸處理,從而得到所有元素的全排列。以對字符串abc進行全排列為例,我們可以這么做:以abc為例
固定a,求后面bc的排列:abc,acb,求好后,a和b交換,得到bac
固定b,求后面ac的排列:bac,bca,求好后,c放到第一位置,得到cba
固定c,求后面ba的排列:cba,cab。代碼可如下編寫所示 #include<iostream> using namespace std; void Permutation(char* pStr, char* pBegin); void permutation(char* pStr) { Permutation(pStr, pStr); } void Permutation(char* pStr, char* pBegin) { if(!pStr || !pBegin) return; if(*pBegin == '\0') { printf("%s\n", pStr); } else { for(char* pCh = pBegin; *pCh != '\0'; ++ pCh) { // swap pCh and pBegin char temp = *pCh; *pCh = *pBegin; *pBegin = temp; Permutation(pStr, pBegin + 1); // restore pCh and pBegin temp = *pCh; *pCh = *pBegin; *pBegin = temp; } } } int main() { char str[] ={'a','b','c','d','\0'};permutation(str);getchar();return 0; }
總結
以上是生活随笔為你收集整理的全排列 (C语言实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑指offer 算法(树的两个节点的最低
- 下一篇: 求集合/字符串中的所有组合 (C语言)