字符串的排列

题目

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串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]);
        }
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章