思路较简单,暴力遍历即可
class Solution {
public:
string countAndSay(int n) {
if(n==1)
return "1";
string ans,record="1";
for(int i=1;i<n;i++)
{
int len=record.size();
int cnt=0,num=-1;
ans="";
for(int j=0;j<len;j++)
{
if(record[j]!=char(num+'0'))
{
if(cnt>0)
ans=ans+char('0'+cnt)+char('0'+num);
cnt=1;
num=record[j]-'0';
}
else
cnt++;
}
record=ans+char('0'+cnt)+char('0'+num);
}
return record;
}
};
考虑的过程中,担心会发生超过9个同一数字连续出现的情况,这样就不能以char的类型将cnt加入ans或record了。后来仔细一想,这是不可能的(可以假设n取某个值x时出现这种情况,那么在取值为x-1时,该数字连续出现的个数将更多,继续回溯,结论将与当n=1时返回值为“1”矛盾)