cout and say 请教大神

//大神给看下 n=8,iter 怎么越界了
class Solution {
public:
 string countAndSay(int n) {
 string str = "11";
 auto iter = str.begin();
 if (n == 1) { return "1"; }
 if (n == 2) { return "11"; }
 if (n >= 3) {
 for (int j = 0; j < n - 2; j++)
 {
 int count = 1;
 int length = str.size();
 cout << "length:" << length << endl;
 for (int i = 0; i < length; i++)
 {
 if (i <length - 1)
 {
 if (str[i] == str[i + 1])
 {
 count++;
 if (i + 1 == length - 1)
 {
                            str.push_back(str[i]);
                            count = 1;
                            break;
                        }
                    }
                    else
                    {
                        str.push_back(char(count + 48));
                        str.push_back(str[i]);
                        count = 1;
                    }
                }
                else
                {
                    str.push_back('1');
                    str.push_back(str[i]);
                    count = 1;
                    break;
                }
            }
         
            iter = str.erase(iter, iter + length);//这里
            iter = str.begin();//这里
         
        }
        return str;
    }
}
};
#C++工程师#
全部评论
。。。 是不是该发一下题目是啥
点赞 回复 分享
发布于 2017-10-25 13:37
擦,我改出来了。 把图中注释地方的语句互换一下顺序 ,即改成 iter = str.begin(); iter = itr.erase(iter, iter + length); 不过我不明白,在循环的时候这和原代码原理 不是一样吗,都是重置iter;   为啥 源代码不行???
点赞 回复 分享
发布于 2017-10-25 14:24

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务