這個題目關鍵是理解題目。別人是這樣理解的。
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.
// 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;
}