輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。
輸入乙個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。
遞迴法,問題轉換為先固定第乙個字元,求剩餘字元的排列;求剩餘字元排列時跟原問題一樣。
(1)遍歷出所有可能出現在第乙個位置的字元(即:依次將第乙個字元同後面所有字元交換);
(2)固定第乙個字元,求後面字元的排列(即:在第1步的遍歷過程中,插入遞迴進行實現)。
需要注意的幾點:
(1) 先確定遞迴結束的條件,例如本題中可設begin == str.size() - 1;
(2) 形如aba或aa等特殊測試用例的情況,vector在進行push_back時是不考慮重複情況的,需要自行控制;
(3) 輸出的排列可能不是按字典順序排列的,可能導致無法完全通過測試用例,考慮輸出前排序,或者遞迴之後取消復位操作。
vectorpermutation(string str)
void permutation(string str,vector&result,int begin)
} else }
}
劍指Offer 字串排列
題目描述 輸入乙個字串,列印出該字串中字元的所有排列。解析 step 1 求所有可能出現第乙個位置的字元。把第乙個字元與後面的每個字元交換。step 2 固定第乙個字元,將後面的字元利用遞迴進行全排列。include include using namespace std void stringpe...
劍指offer 字串的排列
題目描述 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c 所能排列出來的所有字串abc,acb,bac,bca,cab和cba。結果請按字母順序輸出。解題思路 深度搜尋,在每層搜尋裡設定乙個a陣列對映所有字元,每個字元在這層迴圈中只能使用一次,避免重...
劍指offer 字串的排列
輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。結果請按字母順序輸出。輸入描述 輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。分析 經典問題。記住吧。class ...