随笔 - 165,  文章 - 0,  评论 - 4,  阅读 - 18023

题目:

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   孜孜不倦fly  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示