这个题目关键是理解题目。别人是这样理解的。
1
1个1,即11
2个1,即21
1个2,1个1,即1211,
1个1,1个2,2个1,即111221,
3个1,2个2,1个1,即312211
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.
Show Similar Problems
// test38CountAndSay.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include "string"
#include "iostream"
using std::cout;
using std::endl;
using std::string;
string countAndSay(int n);
string count(string temp);
int _tmain(int argc, _TCHAR* argv[])
{
string s = countAndSay(4);
return 0;
}
string countAndSay(int n)
{
string result;
if (n == 1)
return "1";
else
{
result = "1";
for (int i = 1; i < n; i++)
{
result = count(result);
}
}
return result;
}
string count(string temp)
{
int n = temp.size();
char countNum;
int count = 0;
string result = "";
char current = temp[0];
for (auto i = 0; i < n; i++)
{
if (temp[i] == current)
{
count++;
continue;//相等就继续往后搜索
}
else
{ //不等则拼接后重新搜索,注意当前字符更新。
countNum = count + 48;//Int转字符型
result += countNum;
result += current;
count = 1;
current = temp[i];
}
}
//拼接最后搜索到的数字。
countNum = count + 48;
result += countNum;
result += current;
return result;
}