题意
给出一个字符串,求其排列。
思路
该题思路与有重复项数字的全排列类似,只需要将题目中的数字换成字母即可,因此做法也可以采用回溯法,代码如下:
class Solution {
public:
    vector<string > ans;//存储答案用数组
    bool used[10];//判断某个字母是否被使用过
    int N;
  	void dfs(string a,string &str)
    {
        if(a.size()==N){ans.push_back(a);return;}//若求出了一个排列将其存入答案
        for(int i=0;i<N;i++)
        {
            if(!used[i]&& !(i>0 && str[i] == str[i-1] && !used[i-1]))
            {
                used[i]=true;
                a.push_back(str[i]);//放入排列
                dfs(a,str);
                a.pop_back();
                used[i]=false;//回溯
            }
        }
    }
    vector<string> Permutation(string str) {
        memset(used, false, sizeof used);
        N=str.size();
        sort(str.begin(),str.end());
        dfs("",str);//开始搜索
        return ans;
    }
};
复杂度分析
时间复杂度:,为全排列个数。
空间复杂度:,为存储答案所用空间。

 京公网安备 11010502036488号
京公网安备 11010502036488号