列舉字串的全排列(劍指offer)

2021-06-22 18:41:54 字數 754 閱讀 7758

1、題目

輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a、b、c所能排列出來的所有字串abc、acb、bac、bca、cab、cba。

2、解題分析

把複雜的問題分解成小問題。把乙個字串看成由兩部分組成:第一部分為它的第乙個字元,第二部分是後面的所有字元。如圖1所示。

在求整個字串的排列時,看成兩步:首先求所有可能出現在第乙個位置的字元,即把第乙個字元和後面所有的字元交換。如圖1所示。首先固定第乙個字元,求後面所有字元的排列。這時候我們仍把後面的所有字元分成兩部分:後面字元的第乙個字元,以及這個字元之後的所有字元。然後把第乙個字元逐一和它後面的字元交換。

圖1 求字串的排列的過程

3、參考**

void permutation(char* pstr, char* pbegin);

void permutation(char* pstr)

void permutation(char* pstr, char* pbegin)

else

}}// ********************測試**********************

void test(char* pstr)

int _tmain(int argc, _tchar* argv)

劍指 字串全排列

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。思路 遞迴法,問題轉換為先固定第乙個字元,求剩餘字元的排列 求剩餘字...

劍指offer 字串全排列

題目 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。思路 元素排列是遞迴問題,在某個位置上選擇哪個元素就對應著該位置上的元素與其他元素相交換 不要忘了與自己交換的情況 所以按照排列...

劍指offer 字串的全排列

題目描述 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。輸入描述 輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。注意有可能重複,因此需要判斷def swap s...