题目:

class Solution {
public:
    vector<string> result;
    string path;
    void backtracking(const string& s, vector<bool>& used){  
        if(path.size()==s.size()){      //当path长度和s相同时,一种排序收集完成
            result.push_back(path);
            return;
        }
        for(int i=0;i<s.size();i++){
            if(i>0&&s[i]==s[i-1]&&used[i-1]==false){      //因为不能有重复排序,所以要进行同层去重,s[i]==s[i-1]&&used[i-1]==false说明同一层中有重复,就得跳过
                continue;
            }
            if(used[i]==false){
                path.push_back(s[i]);
                used[i]=true;
                backtracking(s, used);
                used[i]=false;
                path.pop_back();
            }
        }
    }
    vector<string> permutation(string s) {
        vector<bool> used(s.size(), false);
        sort(s.begin(), s.end());        //别忘了排序才能去重
        backtracking(s, used);
        return result;
    }
};

以上方法转自代码随想录

posted on 2023-08-15 21:24  孜孜不倦fly  阅读(12)  评论(0)    收藏  举报