字符串的排列

題目

輸入一個字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串abc,則打印出由字符a,b,c所能排列出來的所有字符串abc,acb,bac,bca,cab和cba,注意可能有字符重複。

思路

對當前字符串進行全排列,注意跳過字符重複的情況。

參考代碼

class Solution {
public:
    vector<string> Permutation(string str) {
        vector<string> ans;
        if (!str.length()) return ans;
        GetPermutation(ans, str, 0, str.length());
        sort(ans.begin(), ans.end());
        return ans;
    }
private:
    void GetPermutation(vector<string>& ans, string& str, int index, int length) {
        if (index == length - 1) {
            ans.push_back(str);
            return;
        }
        for (int i = index; i < length; ++i) {
            // 跳過重複的字符
            if (i != index && str[i] == str[index]) continue;
            swap(str[i], str[index]);
            GetPermutation(ans, str, index + 1, length);
            swap(str[i], str[index]);
        }
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章