gpt4 book ai didi

c++ - 递归 C++ 组合学 : Not sure how to get the results in order

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:58:59 26 4
gpt4 key购买 nike

我有一个函数可以打印从长度 0 到长度 n 的所有三元字符串组合:

void TerString(int len,string input){
printf("\n%s",input.c_str());
if (input.length()<len){
TerString(len,input+"0");
TerString(len,input+"1");
TerString(len,input+"2");
return;
}
else
return;
}

但是,我不完全确定如何按照逻辑顺序获取这些内容。例如,当我调用 TerString(3,"") 时,结果是这样的:0,00,000,001,002,01,010,011,012,02,020,021,022,1,10,100,101,102,11,110,111,112,12,120,121,122,2,20,200,201,202,21,210,220,122,22p>2,212

我希望它们按这样的字典顺序出现:0,1,2,00,01,02,10,11,12,20,21,22,...等...

如果不将它们加载到数组/列表中并使用排序算法,有没有办法做到这一点?

最佳答案

请注意,所有相同长度的字符串都已经按正确的顺序排列。你给出的例子根本不是词典顺序,它是按长度排序的。 词典顺序(即字典排序)是您已经看到的。

要获得按长度排序的结果,首先按长度迭代,然后只生成所需长度的字符串:

void TerStringHelper( size_t pos, string& input )
{
if (pos >= input.size())
cout << input << endl;
else
for( input[pos] = '0'; input[pos] < '3'; input[pos]++ )
TerStringHelper(pos+1, input);
}

void TerString( size_t maxlen )
{
string input = "-";
while (input.size() <= maxlen) {
TerStringHelper(0, input);
input += '-';
}
}

demo

关于c++ - 递归 C++ 组合学 : Not sure how to get the results in order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5343889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com