我有一个字符串,我需要找到这个字符串的所有可能的字母组合。我能做到这一点的最佳方式是什么? 例如:
abc
结果:
abc
acb
bca
bac
cab
cba
到目前为止,我什么都没有。我不是要求代码。我只想问最好的方法吗?一个算法?伪代码?也许是讨论?
答案 0 :(得分:3)
你可以对它进行排序然后使用std :: next_permutation
看一下示例:http://www.cplusplus.com/reference/algorithm/next_permutation/
答案 1 :(得分:1)
您想要组合还是排列?例如,如果你的字符串是“abbc”,你想看一次或两次“bbac”吗?
如果您真的想要排列,可以使用std::next_permutation
,它会为您完成所有工作。
答案 2 :(得分:1)
如果您想要组合(订单独立)您可以使用组合查找算法,例如找到here或here的算法。或者,您可以使用this(组合生成器的java实现,并举例说明您想要的内容。
或者,如果您想要在帖子中列出的内容(排列),那么您可以(对于C ++)使用std::next_permutation
中的<algorithm.h>
。您可以在std::next_permutation
here找到更多相关信息。
希望这会有所帮助。 :)
答案 3 :(得分:0)
在C ++中,std::next_permutation
:
std::string s = "abc";
do
{
std::cout << s << std::endl;
} while (std::next_permutation(s.begin(), s.end()));
答案 4 :(得分:0)
复制旧的维基百科文章;
对于每个数k,0≤k<0。 n!,以下算法在序列s上生成唯一的排列。
function permutation(k, s) {
for j = 2 to length(s) {
swap s[(k mod j) + 1] with s[j]; // note that our array is indexed starting at 1
k := k / j; // integer division cuts off the remainder
}
return s;
}