简单题,主要是题目太难理解,没讲清楚,这里转一段别人的解释。
题意是n=1时输出字符串1;n=2时,数上次字符串中的数值个数,因为上次字符串有1个1,所以输出11;n=3时,由于上次字符是11,有2个1,所以输出21;n=4时,由于上次字符串是21,有1个2和1个1,所以输出1211。依次类推。
代码比较繁琐,懒的改了。。
class Solution {
public:
string countAndSay(int n) {
string s = "1";
return generate(n - 1, s);
}
string generate(int n, string & s)
{
if(n == 0)return s;
char co[20];
char flag = s[0];
int count = 0;
string s2;
for(int i = 0; i < s.size(); i++){
if(s[i] == flag) count++;
else {
sprintf(co, "%d", count);
s2 += co;
s2 += flag;
flag = s[i];
count = 1;
}
}
sprintf(co, "%d", count);
s2 += co;
s2 += flag;
return generate(n - 1, s2);
}
};