题意:
定义一种迭代,1, 11, 21, 1211, 111221, ...,比如1211 -> 111221表示1211从左往右读为1个1、1个2、2个1,求迭代n轮的结果。
思路:
用string暴力模拟迭代过程,不推荐迭代计数x个y这种方式,因为x>9的时候会变成2个数字,用string更好处理。
代码:
class Solution {
public:
string countAndSay(int n) {
string s = "1";
while (--n) {
stringstream ss;
int cnt = 1;
for (int i = 1; i < s.size(); ++i) {
if (s[i] != s[i - 1]) {
ss << cnt << s[i - 1];
cnt = 1;
} else {
++cnt;
}
}
ss << cnt << s[s.size() - 1];
s = ss.str();
}
return s;
}
};