一.题目描述
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.
二.题目分析
题目的内容很多,其实就是根据一个数的读法,组合出下一个数,比如11,读作2(个)1,因此下个数是21;同理,21读作1(个)2、1(个)1,因此下个数是1211…
根据题意,发现该题没有什么高级的技巧,代码中主要使用了string
和stringstream
,需要加入头文件#include <string>
,#include <sstream>
,关于string
和stringstream
的用法,可参考:http://blog.csdn.net/xw20084898/article/details/21939811 。该程序只是实现了对题目要求的模拟,然后输出结果。
三.示例代码
#include <string>
#include <sstream>
using namespace std;
class Solution
{
public:
string CountAndSay(int n)
{
string result = "1";
while (--n)
result = theNextStr(result);
return result;
}
private:
string theNextStr(const string& str)
{
if (str.empty())
return string();
stringstream result;
int strSize = str.size();
int count = 1; // 计数
for (int Index = 0; Index < strSize - 1; Index++)
{
if (str[Index] == str[Index + 1])
count++;
else
{
result << count << str[Index];
count = 1;
}
}
result << count << str[strSize - 1]; // 最后一位
return result.str();
}
};
四.小结
需要好好学习一下string
和stringstream
的用法。