剑指 Offer 38. 字符串的排列

Posted Billy Miracle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer 38. 字符串的排列相关的知识,希望对你有一定的参考价值。

菜鸡思考:

全排列问题,可以用DFS,但这道题怎么DFS呢?我们可以建立一个数组,存放每个字符出现的次数。

菜鸡代码:

class Solution 
public:
    vector<string> permutation(string s) 
        vector<int> dict(26, 0);
        for (char c: s) 
            dict[c - 'a'] += 1;
        
        string path;
        vector<string> ans;
        dfs(ans, path, dict, s.length());
        return ans;
    
    void dfs(vector<string>& ans, string& path, vector<int>& dict, int len) 
        if (len == path.length()) 
            ans.push_back(path);
            return;
        
        for (int i = 0; i < 26; ++i) 
            if (dict[i]) 
                dict[i]--;
                path.push_back('a' + i);
                dfs(ans, path, dict, len);
                path.pop_back();
                dict[i]++;
            
        
     
;
开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于剑指 Offer 38. 字符串的排列的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 字符串的排列全排列问题(剑指offer38)

剑指 Offer 38. 字符串的排列

剑指 Offer 38. 字符串的排列

算法剑指 Offer 38. 字符串的排列 重刷

LeetCode 剑指 Offer 38. 字符串的排列 / 31. 下一个排列 / 第 246 场周赛

剑指Offer 38 - 字符串的排列