剑指 Offer 38. 字符串的排列

Posted ai52learn

tags:

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

输入一个字符串,打印出该字符串中字符的所有排列。

 

你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。

 

示例:

输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]
 

限制:

1 <= s 的长度 <= 8

class Solution {
public:
    void dfs(unordered_map<char,int>& mp, int pos, vector<string>& ret, int len,string& s)
    {
        //cout<<pos<<endl;
        unordered_map<char,int>::iterator it;
        for(it = mp.begin();it!=mp.end();it++)
        {
            if(it->second>0)
            {
                s[pos]=it->first;
                it->second--;
                if(pos+1<len)
                dfs(mp,pos+1,ret,len,s);
                else
                {
                    ret.push_back(s);
                }
                it->second++;
            }
        }
    }
    vector<string> permutation(string s) {
        unordered_map<char,int> mp;
        for(auto t:s)
        mp[t]++;
        vector<string> ret;
        dfs(mp,0,ret, s.size(),s);
        return ret;
    }
};

 

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

剑指 Offer 38. 字符串的排列

剑指OFFER----面试题38. 字符串的排列

LeetCode(剑指 Offer)- 38. 字符串的排列

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

剑指offer 面试38题

剑指 Offer 38. 字符串的排列