题目说明
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
n=5
1. 1
2. 11
3. 21
4. 1211
5. 111221
题目分析
一开始想从后往前找规律,后来发现还是从前往后。可以看到其实第二步的 11 是需要用到第三步,需要统计前面相同数字的个数,因此后面也需要将数字转换为字符串,还要连接计数的字符串是哪个(也是需要上一步的字符串),所以这里需要定义一个临时字符串,需要注意其局部的存在区域。
代码
class Solution {
public:
string countAndSay(int n) {
if(n <= 0) return "";
string res = "1";
while(--n) {
string cur = "";
for(int i = 0; i < res.size();++i) {
int cnt = 1;
while( i+1 < res.size() && res[i] == res[i+1]) {
cnt++;
i++;
}
cur = cur + to_string(cnt) + res[i];
}
//cur变量空间内,赋值到res.该步得到的字符串到下一步都需要利用
res = cur;
}
return res;
}
};