解题思路:
一道看起来很麻烦,其实很简单的题目,只要看懂题目就可以了,countAndSay(n) 是对 countAndSay(n-1) 的描述,从这里就可以明白后一个数是从前一个数来的,比如n为4时,1,11,21,1211,从第二个数解释为:一个1,两个1,一个2,、一个1,是不是很简单,对于前一个数,只要固定住连续同一个数的首尾,统计长度即可,代码如下:
class Solution {
public:
string countAndSay(int n) {
string prev = "1";
for (int i = 2; i <= n; ++i) {
string curr = "";
int start = 0;
int pos = 0;
while (pos < prev.size()) {
while (pos < prev.size() && prev[pos] == prev[start]) {
pos++;
}
curr += to_string(pos - start) + prev[start];
start = pos;
}
prev = curr;
}
return prev;
}
};