编写置换函数
Writing a permutation function
本文关键字:函数 更新时间:2023-10-16
我被要求编写使用递归的置换函数。该函数的唯一参数应该是我应该找到所有排列的字符串。该函数应以所有可能的排列返回向量。我知道我可以在STL算法中使用next_permutation
,但是我被要求不这样做。
我已经设置了基本案例,我知道我需要一个循环,但是我不确定从那里去哪里。有人可以将我指向正确的方向吗?
vector <string> getPerm(string str)
{
vector<string> v;
if(w.length() <= 1)
{
v.push_back(str);
return v;
}
else
{
for(int i = 0; i < str.size(); i++)
{
//Some code
}
}
}
任何帮助将不胜感激。
想象您已经有了函数上次迭代的结果,返回字符串的第一个N-1元素的所有排列。
vector<string>& v_prev = getPerm(str.substr(0, str.length()-1));
在
中使用它//Some code
代码的一部分。
另一个提示:使用0长的字符串作为递归的停止条件。您可以递归地构建1-Lenght置换;)
这是整个解决方案:
vector<string> getPerm(string str)
{
vector<string> v;
if (str.empty())
{
v.push_back(string());
return v;
}
else
{
vector<string>& v_prev = getPerm(str.substr(0, str.length()-1));
for(int i = 0; i < v_prev.size(); i++)
{
for (int j = 0; j < v_prev[i].length() + 1; j++)
{
string p = v_prev[i];
p.insert(j, str.substr(str.length() - 1, 1));
v.push_back(p);
}
}
return v;
}
}
考虑字符串" 123"
的这些排列123
132
213
231
312
321
并考虑" 12"的这些排列
12
21
,如果您知道所有n-1
字母子字符串的排列,您是否可以看到如何构建n
字母字符串的排列。这种类型的解决方案将是递归的。
- 对于
yourArray
中的每个元素x
- 在没有元素
x
的情况下制作yourArray
的副本。称此新数组newArray
。 - 查找
newArray
的所有排列 - 将元素
x
添加到每个排列的开头
- 在没有元素
实施肯·布鲁姆(Ken Bloom)写的:
vector <string> getPerm(string str)
{
vector<string> v;
if(str.length() <= 1)
{
v.push_back(str);
return v;
}
else
{
for(int i = 0; i < str.size(); i++){
vector<string> perms = getPerm(str.substr(0,i)+str.substr(i+1));
for(int j = 0; j < perms.size(); j++){
v.push_back(str[i] + perms[j]);
}
}
}
}
尝试这样的东西:
permut(s) :
if s.length=0 : exit;
else :
for i=0 to s.length :
front:=s[i];
remove(s,i);
s2 := front + permut(s);
print s2, NEWLINE;
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗