c++ - 在 C++ 中使用递归计数和说

标签 c++ string algorithm

给定'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/

相关文章:

c++ - 在嵌套 Lambda 中使用 `decltype` 时出现 GCC 段错误

c++ - QThreads , QObject 和 sleep 函数

c - 如何在c中输入两个空格分隔的单词有时可以省略一个单词

algorithm - 子集和变化

algorithm - 比较两个大型电子邮件地址列表的最佳方法或算法是什么?

Java程序Opencv unsatisfiedlinkerror

c# - .NET + pInvoked C++ 动态链接库 + 多线程

python - 将 str 转换为路径类型?

python - 我可以将 SQLite 转换为字符串而不是 Python 中 TEXT 的 unicode 吗?

java - 磁带平衡顺应性训练