class Solution {
public String countAndSay(int n) {
if (n == 1) return "1"; // corner case
StringBuilder sb = new StringBuilder();
sb.append("1"); // initialize
// "1" is the 1st one (0), so start from 2nd (1).
for (int i = 1; i < n; ++i) {
StringBuilder newSb = new StringBuilder(); // new result stored here
int curr = 0; // pointer keep going right
while (curr < sb.length()) {
int count = 0;
char c = sb.charAt(curr);
while (curr < sb.length() && sb.charAt(curr) == c) {
count++;
curr++;
}
newSb.append(String.valueOf(count));
newSb.append(c);
}
sb = newSb;
}
return sb.toString();
}
}
class Solution {
public:
string countAndSay(int n) {
string last{"1"};
// 运行 n-1 次
for (int i = 1; i < n; ++i) {
string curr;
char prev = last[0];
int count = 1;
// 数之前string每个数字的个数,生成curr string
for (int j = 1; j < last.size(); ++j) {
if (last[j] == prev) {
count++;
} else {
curr.append(to_string(count) + prev);
prev = last[j];
count = 1;
}
}
curr.append(to_string(count) + prev);
last = curr;
}
return last;
}
};