题目地址:
https://leetcode.com/problems/count-and-say/
从字符串“ 1 1 1”出发,每次按这样的规则递推:出现了连续 k k k个相同数字 m m m,就将这一段变为“ k m km km”,如此一直替换下去。再给定一个正整数 n n n,问递推 n − 1 n-1 n−1步后得到的字符串是什么。
按照定义模拟即可。代码如下:
class Solution {
public:
string countAndSay(int n) {
string s = "1";
for (int i = 0; i < n - 1; ++i) {
string res;
int len = s.size();
for (int j = 0; j < len; ++j) {
int k = j + 1;
while (k < len && s[k] == s[j]) {
++k;
}
res += to_string(k - j) + s[j];
j = k - 1;
}
s = res;
}
return s;
}
};
时空复杂度难以估计。