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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[剑指offer]面试题28:字符串的排列

發布時間:2023/12/4 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [剑指offer]面试题28:字符串的排列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

面試題28:字符串的排列
題目:輸入一個字符串,打印出該字符串中字符的所有排列。例如輸入字符串abc,則打印出由字符a、b、c所能排列出來的所有字符串abc、acb、bac、bca、cab和cba。

思路:
這是一個典型的遞歸問題,考慮如何將復雜問題分解成簡單問題,最后通過遞歸解決。我們肯定有這樣的經驗,自己在寫abc的全排列的時候,肯定會想首先確定第一個字符,然后考慮后面有什么排列,比如確定第一個字符為a,那么剩下的b和c有兩種排列,分別是bc和cb,那么以a開頭的字符串有abc,acb這兩種排列。這就是我們下面程序所需要用到的解題思路。

  • 將字符串排列分解為字符串的第一個字符以及其后的剩余字符。剩余字符串又可以按照前面的思路來解決,分解為第一個字符和剩余字符串。當最后只有一個字符的時候,程序就到達出口,這個時候輸出字符串,就是其中的一個排列。
  • 字符串abc,那么可能出現在第一個字符的可能性有三種,我們只需要每次交互第一個字符,然后計算剩余字符串的排列即可。采用遞歸思路解決問題。
  • 代碼如下:

    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:字符串的排列的全部內容,希望文章能夠幫你解決所遇到的問題。

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