分析
-
本题的考点:模拟。
-
按照题目要求模拟一遍即可。
代码
- C++
class Solution {
public:
string countAndSay(int n) {
string s = "1";
for (int i = 0; i < n - 1; i++) {
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;
}
};
- Java
class Solution {
public String countAndSay(int n) {
String s = "1";
for (int i = 0; i < n - 1; i++) {
StringBuilder t = new StringBuilder();
char[] cs = s.toCharArray();
for (int j = 0; j < cs.length; ) {
int k = j + 1;
while (k < cs.length && cs[k] == cs[j]) k++;
t.append(k - j).append(cs[j]);
j = k;
}
s = t.toString();
}
return s;
}
}
时空复杂度分析
-
时间复杂度:$O(n)$,
n
为输入的数据。 -
空间复杂度:$O(n)$,
n
为输入的数据。