您的位置:首页 > 编程语言 > C语言/C++

编写一个方法,返回某字符串的所有排列组合。

2014-02-09 10:17 281 查看
简单构造法:

n=1时,S=a1, 只有字符串a1;

n=2时,S=a1a2,有2种排列组合,a1a2,a2a1

n=3时,S=a1a2a3,排列组合为,a3a1a2, a1a3a2, a1a2a3, a3a2a1, a2a3a1, a2a1a3

根据f(n-1)求f(n),将an插入到f(n-1) 的所有字符串的任意位置。

C++实现:

#include <string>
#include <vector>

using namespace std;

vector<string> getPerms(string str)
{
if (str.size() == 0)
return vector<string>();

vector<string> allperms;

allperms.push_back("");

for(string::iterator iter = str.begin(); iter != str.end(); ++iter)
{
char item = *iter;
vector<string> words;

for(vector<string>::iterator it = allperms.begin(); it != allperms.end(); ++it)
{
for(string::size_type i = 0; i <= (*it).size(); ++i)
{
string word = (*it);
word.insert(i, 1, item);
words.push_back(word);
}
}

allperms.swap(words);
}

return allperms;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试 c++ 简单构造
相关文章推荐