剑指 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. 字符串的排列的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode(剑指 Offer)- 38. 字符串的排列