题意:
-
1
-
11
-
21
-
1211
-
111221
按照题意每一个数都是对前一个数的报数,对前一个数相同数字的统计,即6就是对第5个数111221的报数,111221中有3个1(即31),2个2(即22),1个1(即11),所以6就可以表示为:312211.
思路:可以通过while循环对1进行n-1次迭代,每次迭代中统计前一个数中同一个数字出现的次数和该数字,并将结果依次拼接到新的字符串中用于下一次迭代。
class Solution {
public:
string countAndSay(int n) {
if(n<=0)return "";
string ans="1";
while(--n)
{
string tmp="";
for(int i=0;i<ans.size();++i)
{
int t=1;
while(i+1<ans.size()&&ans[i]==ans[i+1])
++t,++i;
tmp+=to_string(t)+ans[i];
}
ans=tmp;
}
return ans;
}
};