给定'n',问题是生成第n个Count和Say序列。 Here是问题描述。
我试图通过递归来解决这个问题:
编辑: 基本上遍历字符串并计算连续的 1s、2s(或其他)并将(计数+我们计算的那个数字)(顺便说一句,它是一个字符串)附加到最终要返回的主字符串。 该链接现在有效。
string gofind(int N){
if(N==1) return "1";
else{
string temp = gofind(N-1);
ostringstream str1;
string* t = &(temp);
int count;
string n;
while(*t!="\0"){
count=1;
while(*t==*(t+1)) {
count++;
t++;
}
str1<<count;//basically to convert int to str
string geek = str1.str();
n.append(geek+*t);
t++;
}
return n;
}
}
这会在运行时“bad_alloc”期间引发异常。这段代码中可能有很多错误。 有人可以指出什么吗?什么是正确的递归解决方案。
最佳答案
这不是遍历字符串的正确方法:
string* t = &(temp); // Please no!
while(*t!="\0"){
这为您提供了一个指针,指向 string
存储其控制 block 的位置,即诸如其大小等信息 - 这不是字符数据所在的位置。此外,您将此指针视为存在一个 strings
数组,而不是一个字符数组(两者都不是)。
您可以通过简单地索引它来遍历字符串:
for (int i = 0; i < temp.size() - 1; ++i)
{
count = 1;
while ((i+1 < temp.size()) && (temp[i] == temp[i+1]))
{
count++;
i++;
}
}
我认为您可以从这里算出完整的解决方案。
关于c++ - 在 C++ 中使用递归计数和说,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50877227/