生成c+中两个给定字符串的可能组合+;使用递归 我试图找出如何在C++中打印所有的组合。 给定的输入是{“abc”,“xyz”},期望的输出是{“ax”,“ay”,“az”,“bx”,“by”,“bz”,“cx”,“cy”,“cz”} 我发
生成c+中两个给定字符串的可能组合+;使用递归 我试图找出如何在C++中打印所有的组合。 给定的输入是{“abc”,“xyz”},期望的输出是{“ax”,“ay”,“az”,“bx”,“by”,“bz”,“cx”,“cy”,“cz”} 我发现了以下递归代码片段:生成c+中两个给定字符串的可能组合+;使用递归 我试图找出如何在C++中打印所有的组合。 给定的输入是{“abc”,“xyz”},期望的输出是{“ax”,“ay”,“az”,“bx”,“by”,“bz”,“cx”,“cy”,“cz”} 我发,c++,C++,生成c+中两个给定字符串的可能组合+;使用递归 我试图找出如何在C++中打印所有的组合。 给定的输入是{“abc”,“xyz”},期望的输出是{“ax”,“ay”,“az”,“bx”,“by”,“bz”,“cx”,“cy”,“cz”} 我发现了以下递归代码片段: `#include <bits/stdc++.h> using namespace std; void printKLengthString(char set[], string sequence, in
`#include <bits/stdc++.h>
using namespace std;
void printKLengthString(char set[], string sequence, int n, int k) {
if (k == 0){
cout<<sequence<<"\t";
return;
}
for (int i = 0; i < n; i++){
string newSequence;
newSequence=sequence+set[i];
printKLengthString(set, newSequence, n, k - 1);
}
}
int main() {
char set[] = {'a', 'b'};
int n = 2;
int k = 3;
printKLengthString(set, "", n, k);
}`
`include
使用名称空间std;
void printKLengthString(字符集[],字符串序列,int n,int k){
如果(k==0){
coutconst unsigned int n1=strlen(s1);
常数无符号整数n2=strlen(s2);
对于(In In I1=0;I1是使用递归的义务吗?因为2对于循环来说是足够的,用于您期望的输出规则:用一个食盐,任何从<代码>开始的建议包括使用命名空间STD;< /Calp> <代码>使用命名空间STD;<代码> >包含了,通过将整个C++标准库填入您的程序。由于全局命名空间中现在有成千上万个不必要的标识符,您正在雷区中编码。是的,这是一个递归,因为我们使用了大量的输入字符串,时间复杂度将更小。时间复杂度是对执行的操作数目的度量。它不在乎是否因为循环而执行操作迭代,递归。您可以将goto
s放入混合,手动执行循环展开,并使代码过于复杂以隐藏真实的迭代次数,这不会改变时间复杂度。要降低时间复杂度,您必须更改算法以减少执行的工作量。我建议添加所需的输出回答这个问题以消除任何关于你的目标的模糊性。添加一个关于如何解决问题的解释question@OrlenshShalom,输出是根据要求进行的,但当使用多个字符串输入时,时间复杂度因素就进来了。因此需要使用recursion@SourabhMisal在这里,递归并不能提高时间复杂度。所显示的代码对于您描述的问题具有尽可能高的复杂性。是的@Bessietechow,对于我给出的示例输入,它是绝对正确的。我想将我的输入从2扩展到100,这需要很多时间,因此,我要求使用递归或任何其他比这更快的方法。@SourabhMisal问题应该是编辑以指示可以输入任意数量的字符串,而不仅仅是2个。
`#include <bits/stdc++.h>
using namespace std;
void printKLengthString(vector<char> set, string sequence, int n, int k) {
if (k == 0){
cout<<sequence<<"\t";
return;
}
for (int i = 0; i < n; i++){
string newSequence;
newSequence=sequence+set.at(i);
printKLengthString(set, newSequence, n, k - 1);
}
}
int main() {
vector<string> stringIn = {"ab", "xy"};
// int n = 2;
// int k = 2;
// for (int i = 0; i < set.size(); i++) {
// cout << set[i] << "\n";
// }
vector<char> set;
for (int i = 0; i < stringIn.size(); i++) {
for (int j = 0; j < stringIn[0].size(); j++) {
// cout << stringIn[i].at(j) << "\n";
// str += char(set[i].at(j));
set.push_back(stringIn[i].at(j));
}
}
// for (char k: set) {
// cout << k << "\t";
// }
cout << "\n";
// cout << "stringIn Size : " << stringIn.size() << "\n";
// cout << "set Size : " << set.size() << "\n";
int k = stringIn.size();
int n = set.size();
printKLengthString(set, "", n, k);
}`
const unsigned int n1 = strlen(s1);
const unsigned int n2 = strlen(s2);
for (unsigned int i1=0;i1<n1;i1++)
{
for (unsigned int i2=0;i2<n2;i2++)
{
printf("%c%c\n",s1[i1],s2[i2]);
}
}