[剑指offer]面试题28:字符串的排列
生活随笔
收集整理的這篇文章主要介紹了
[剑指offer]面试题28:字符串的排列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
面試題28:字符串的排列
題目:輸入一個字符串,打印出該字符串中字符的所有排列。例如輸入字符串abc,則打印出由字符a、b、c所能排列出來的所有字符串abc、acb、bac、bca、cab和cba。
思路:
這是一個典型的遞歸問題,考慮如何將復雜問題分解成簡單問題,最后通過遞歸解決。我們肯定有這樣的經驗,自己在寫abc的全排列的時候,肯定會想首先確定第一個字符,然后考慮后面有什么排列,比如確定第一個字符為a,那么剩下的b和c有兩種排列,分別是bc和cb,那么以a開頭的字符串有abc,acb這兩種排列。這就是我們下面程序所需要用到的解題思路。
代碼如下:
void Permutation(char *pStr) {if (pStr == nullptr) return;Permutation(pStr, pStr); }void Permutation(char *pStr, char *pBegin) {if (*pBegin == '\0') cout << pStr << " ";else{for (char *pCh = pBegin; pCh != '\0'; pCh++)//這個for循環就是考慮某個位置出現哪個字符{char temp = *pCh;*pCh = *pBegin;*pBegin = temp;Permutation(pStr, pBegin + 1);//這個就是考慮后面有什么排列char temp = *pCh;*pCh = *pBegin;*pBegin = temp;}} }測試用例:
● 功能測試(輸入的字符串中有1個或者多個字符)。
● 特殊輸入測試(輸入的字符串的內容為空或者是NULL指針)。
本題考點:
● 考查思維能力。當整個問題看起來不能直接解決的時候,應聘者能否想到把字符串分成兩部分,從而把大問題分解成小問題來解決,是能否順利解決這個問題的關鍵。
● 考查對遞歸的理解和編程能力。
總結
以上是生活随笔為你收集整理的[剑指offer]面试题28:字符串的排列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [剑指offer]面试题26:复杂链表的
- 下一篇: 调整一个参数即可自定义锐龙的TDP锐龙怎