【发布时间】:2018-04-13 06:21:33
【问题描述】:
问题是:
创建一个函数来计算字符串数组的所有组合,例如:{ { "red", "wooden", "gate" }, { "lazy", "little", "man" }, { "what", "where", "who", "why" } } 以输出:red lazy what、red lazy where、red lazy who、red lazy why、red little what 等... ..
此函数将打印第一个数组中的一个单词、第二个数组中的一个单词、第三个数组中的一个单词等的所有组合。
您的解决方案可能不使用递归
注意:数组的数量和每个数组中的元素数量可能会有所不同!您的方法需要能够处理此问题。
我正在尝试练习我的算法,而这个问题简直让我发疯。我试过集思广益一些事情,但在这一点上,花了几个小时无处可去。当我想到也许我只需要创建一个字符串向量(尽管这将成为一个非常大的向量......现在,让我们称之为矢量endings)。如果我在给定vector<vector<string>> 的外部向量中向后遍历并通过将每个结尾附加到当前外部向量中的每个字符串来更新endings,那么当我到达第一个外部向量时,我的所有组合将是在endings.
我可能没有立即想到这一点,因为我认为如果我只是打印,我不应该存储这么多。无论如何,这里有一些拙劣的代码,我停止工作以发布此内容。不多。
vector<vector<string>> ar = {{"red", "wooden", "gate"},
{"lazy", "little", "man"},
{"what", "where", "who", "why"}};
vector<string> res(ar.size());
for (int i = 0; i < ar.size(); i++) {
res[i]= ar[i][0];
}
int i;
for (i = ar.size()-1; i > 0; i--) {
for (int j = arr.size()-1-i, j > arr.size()-1-i; j--) {
// ...
}
}
让我知道你建议如何解决这个问题。
【问题讨论】:
-
提示:您可以使用堆栈将任何递归转换为迭代
-
看std::next_permuatation的源码
-
@RichardHodges 这与排列无关。
-
假设你所有的字符串数组都有相同的内容,
{"0","1"}。假设有四个。你期望什么样的输出?如果它们都包含{"0","1","2"}怎么办? (现在是关键部分)如果一些包含{"0","1"}而另一些包含{"0","1","2"},你能应付吗? -
嗨,也许这篇 SO 文章可以帮助你stackoverflow.com/questions/18732974/…
标签: c++ arrays string recursion vector