剣指Offer-JZ 27-文字列の配列
タイトルの説明
文字列を入力し、その文字列のすべての配列を辞書順に印刷します.例えば文字列abcを入力すると、文字a,b,cで並べられるすべての文字列abc,acb,bac,bca,cab,cbaが印刷される.
問題を解く構想.
コードを参照
コード実装
実行結果
実行時間:5 msメモリ消費量:492 k
文字列を入力し、その文字列のすべての配列を辞書順に印刷します.例えば文字列abcを入力すると、文字a,b,cで並べられるすべての文字列abc,acb,bac,bca,cab,cbaが印刷される.
問題を解く構想.
コードを参照
コード実装
class Solution {
public:
vector<string> Permutation(string str) {
vector<string> vecOfStr;
if(str.empty()){
return vecOfStr;
}
permutationHelper(str, vecOfStr, 0);
sort(vecOfStr.begin(), vecOfStr.end());
return vecOfStr;
}
private:
void swap(char& firstChar, char& secondChar){
char tmp = firstChar;
firstChar = secondChar;
secondChar = tmp;
}
void permutationHelper(string str, vector<string>& vecOfStr, int begin){
if(begin == str.size() - 1){
if(find(vecOfStr.begin(), vecOfStr.end(), str) == vecOfStr.end()){
// ?
vecOfStr.push_back(str);
}
}
else{
for(int i = begin; i < str.size(); i++){
swap(str[i], str[begin]);
permutationHelper(str, vecOfStr, begin + 1);
swap(str[i], str[begin]);
}
}
}
};
実行結果
実行時間:5 msメモリ消費量:492 k