1. 题目来源
链接:38. 外观数列
2. 题目解析
题意读了半天,才理解。
这道题完全也可以理解成双指针的做法,从头遍历到尾,如果是重复数字的话那就跳过判断下一个。最终停下来,两指针相减即为中间重复数字的个数,将重复数字的个数及该数字构成新的字符串,进行下次的迭代判断即可,迭代次数就是 n-1
次。
也是 PAT
的一道经典题目。
时间复杂度:
O
(
n
2
)
O(n^2)
O(n2)
空间复杂度:
O
(
1
)
O(1)
O(1)
代码:
class Solution {
public:
string countAndSay(int n) {
string s = "1";
for (int i = 0; i < n - 1; i ++ ) { // 迭代 n-1 次
string t;
for (int j = 0; j < s.size(); ) {
int k = j + 1;
while (k < s.size() && s[k] == s[j]) k ++;
t += to_string(k - j) + s[j];
j = k;
}
s = t;
}
return s;
}
};