1, 11, 21, 1211, 111221, ...
意思为第一个为1,那么第二个就表示为第一个为1个1,所有为11,第三个就是来描述第二个的,有2个1,那么就是21,第四个来描述第三个,为1个2,1个1,所以为1211.依次类推。
<span style="font-size:14px;">class Solution {
public:
string countAndSay(int n) {
n--;
vector<int>s[2];
s[0].push_back(1);
for(int ii=0;ii<n;ii++){
int mark=s[ii%2][0];
int cnt=0;
for(int jj=0;jj<s[ii%2].size();jj++){
if(mark!=s[ii%2][jj]){
s[(ii+1)%2].push_back(cnt);
s[(ii+1)%2].push_back(mark);
cnt=1;
mark=s[ii%2][jj];
}
else cnt++;
}
if(cnt){
s[(ii+1)%2].push_back(cnt);
s[(ii+1)%2].push_back(*(s[ii%2].end()-1));
}
s[ii%2].clear();
}
string ans;
for(int ii=0;ii<s[n%2].size();ii++){ //是用来防止数据超过10,那么不能简单的用int+'0'来处理了,不过貌似官方
int ee=s[n%2][ii]; //没有提供那么大的数据
string rr;
while(ee){
int yy=ee%10;
ee/=10;
rr+=yy+'0';
}
reverse(rr.begin(),rr.end());
ans+=rr;
}
return ans;
}
};</span>