问题:The count-and-say sequence is the sequence of integers beginning as follows:
1, 11, 21, 1211, 111221, ...
1
is read off as "one 1"
or 11
.
11
is read off as "two 1s"
or 21
.
21
is read off as "one 2
, then one 1"
or 1211
.
Given an integer n, generate the nth sequence.
Note: The sequence of integers will be represented as a string.
题目比较难懂,就是要输出上面第一行的序列,输入参数n表示要输出前n个。这行序列的意思是数上个字符串中的数值个数,n=1时输出字符串1;n=2时,因为上次字符串是1,有1个1,所以输出11;n=3时,由于上次字符是11,有2个1,所以输出21;n=4时,由于上次字符串是21,有1个2和1个1,所以输出1211,一次类推。用一个比较简单的迭代即可完成。
string itercont(string str)
{
string res;
int cont=1;
int i=0;
for( i=0; i<str.size()-1; i++)
{
if(str[i]==str[i+1])
cont++;
else
{
res.push_back('0'+cont);
res.push_back(str[i]);
cont=1;
}
}
if(i==str.size()-1)
{
res.push_back('0'+cont);
res.push_back(str[i]);
}
return res;
}
string countAndSay(int n)
{
if (n <= 0) return string();
string result="1";
for(int i=1; i<n; i++)
{
result=itercont(result);
}
return result;
}