字符串排列-全排列(C++ 剑指offer)

以下网址可以帮助大家透彻理解全排列算法:

https://www.bilibili.com/video/av9830088

class Solution {
public:
    vector Permutation(string str) {
        //可以用递归来做
        vector array;
        if(str.size()==0) return array;
        int begin=0;
        res(array,str,begin);
        sort(array.begin(), array.end());
        return array;
    }
     
    void res(vector &array, string str, int begin)//遍历第begin位的所有可能性
    {
        if(begin==str.size()-1)//看begin是否是str的最后一个字符
            array.push_back(str);
        for(int i=begin; i<=str.size()-1;i++)
        {
            if(i!=begin && str[i]==str[begin])//有重复字符时,跳过
                continue;
            swap(str[i], str[begin]);//当i==begin时,也要遍历其后面的所有字符;
                                    //当i!=begin时,先交换,使第begin位取到不同的可能字符,再遍历后面的字符
            res(array, str, begin+1);//遍历其后面的所有字符;
             
            swap(str[i], str[begin]);//将begin处的元素重新换回来
        }
    }
};

 

你可能感兴趣的:(剑指offer)