1. 程式人生 > >對輸入的字串按字典順序輸出所有的全排列,字串可以由重複字元

對輸入的字串按字典順序輸出所有的全排列,字串可以由重複字元

思路:

 1、把字串看成倆部分,第一個字元和後面的整個快;

 2.、每次把第一個字元和後面的一個交換,

 3,固定第一個字元然後對後面的字元塊進行全排列

 4、對後面字串的全排列可以依舊這樣遞迴

    void PermutationHelp(vector<string> &ans, int k, string str) //遍歷第k位的所有可能
    {
        if(k == str.size() - 1)
            ans.push_back(str);
        //因為是傳值 每次都要對字串排序
         sort(str.begin()+k, str.end());
        for(int i = k; i < str.size(); i++)
        {
            //去重複
            if(i != k && str[k] == str[i])
                continue;
            swap(str[i], str[k]);
            PermutationHelp(ans, k + 1, str);
            //復位
            swap(str[i], str[k]);
        }
    }
 
    vector<string> Permutation(string str) {
        vector<string> ans;
        PermutationHelp(ans, 0, str);
        return ans;
    }