还是字符串题目,1 对应“1”,第二个根据上一个的“1”,为1个“1”,即“11”,第三个分析“11”,两个1,即“21”,依次分析下去,递归即可。
效率还可以吧
还是需要注意边界
字符串拼接:http://blog.csdn.net/ljp1919/article/details/48134335
The count-and-say sequence is the sequence of integers with the first five terms as following:
1. 1 2. 11 3. 21 4. 1211 5. 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 term of the count-and-say sequence.
Note: Each term of the sequence of integers will be represented as a string.
string countAndSayImpl(const string s)
{
int count = 0;
char c ;
stringstream ss ;
for (int i = 0; i < s.size(); ++i)
{
if (count == 0)
{
c = s[i];
count++;
}
else
{
// c 已经有值,与s[i]比较
if (c == s[i])
{
count++;
}
else
{
ss << count <<c;
c = s[i];
count = 1; //这个值有1个了,不能赋值为0
}
}
}
if (count != 0)
ss << count << c;
return ss.str();
}
// 38. Count and Say
string countAndSay(int n) {
string result = "1";
for (int i = 0; i < n - 1; ++i)
{
result = countAndSayImpl(result);
}
return result;
}