题解
这题题面意思有点难读,建议结合样例来帮助理解题面意思。通过观察发现第i项的值只与前一项(上一层)的结果有关系,然后我们发现这题的数据范围比较小,适合用递归方法来求解。注意递归边界条件是当n=1的时候,此时就返回”1”;当n>1的时候通过递归下去,然后结合递归返回的上一层的字符串,通过简单的模拟操作来求出第i项的结果。然后在模拟的时候,我用到一些比较小的tricky,具体的就看看我的代码吧^^。这题题目不是很难吧,但是是个值得反复练习的好题。
class Solution {
public:
string gao(int n) {
if (n == 1) {
string temp = "1";
return temp;
}
string t = gao(n-1);
string Cur;
int Count = 1;
char lastChar = t[0];
t += '#';
for (int i = 0; i < (int)t.size(); i++) {
if (t[i] == t[i+1]) {
Count++;
} else {
if (lastChar == '#') continue;
Cur += Count + '0';
Cur += lastChar;
Count = 1;
lastChar = t[i+1];
}
}
return Cur;
}
string countAndSay(int n) {
string res = gao(n);
return res;
}
};