解法一:
string countAndSay(int n) {
if (n == 0) return "";
string res = "1";
while (--n) {
string cur = "";
for (int i = 0; i < res.size(); i++) {
int count = 1;
while ((i + 1 < res.size()) && (res[i] == res[i + 1])){
count++;
i++;
}
cur += to_string(count) + res[i];
}
res = cur;
}
return res;
}
解法二:
class Solution{
public:
string countAndSay(int n) {
if(n == 1)
return "1";
string result = "1";
for(int i = 1; i < n; ++i) {
result = convert(result);
}
return result;
}
string convert(string str) {
int len = str.length();
if(len == 1) return "1" + str;
string result;
int count = 1;
for(int i = 1; i < len; ++i) {
if(str[i-1] == str[i]) count++;
else {
result = result + static_cast<char>(count + '0') + str[i-1];
count = 1;
}
if(i == len - 1)
result = result + static_cast<char>(count + '0') + str[i];
}
return result;
}
};