描述
分析
这个题花了我半天时间才弄明白是什么意思。(没看到下面有两条提示)
下一个数字的报数实际上就是由上一个报数生成的。
例如:
1 的报数是 1(1x1)
2 的报数是 11(2x1)
3 的报数是 21(1X2,1X1)
4 的报数是1211 …
代码
class Solution {
public:
string countAndSay(int n) {
string pre = "1";
for (int i = 1;i < n;i++) {
string new_str;
int len = pre.length();
for (int j = 0;j < len;) {
int k = j, cnt = 0;
while (k < len && pre[k] == pre[j]) { // 读取连续数字的个数
k++;
cnt++;
}
new_str += to_string(cnt) + pre[j];
j += cnt;
}
pre = new_str;
}
return pre;
}
};