字串的排列方式
阿新 • • 發佈:2018-12-09
class Solution { public: vector<string>Permution(string str) { //判斷輸入 if(str.length()==0) { return result; } PermutionCore(str,0); return result; } private: void PermutionCore(string str,int begin) { if(begin==str.length()) { result.push_back(str); return; } for(int i=begin;i<str.length();i++) { if(i!=begin&&str[i]==str[begin]) continue; swap(str[begin],str[i]); PermutionCore(str,begin+1); } } vector<string>result; };
題目
輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。
輸入描述:
輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。
思路
我們求整個字串的排列,可以看成兩步:首先求所有可能出現在第一個位置的字元,即把第一個字元和後面所有的字元交換。如下圖所示:
上圖就是分別把第一個字元a和後面的b、c等字元交換的情形。首先固定第一個字元,求後面所有字元的排列。這個時候我們仍把後面的所有字元分為兩部分:後面的字元的第一個字元,以及這個字元之後的所有字元。然後把第一個字元逐一和它後面的字元交換。
這個思路,是典型的遞迴思路。