题干:
报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
1. 1 2. 11 3. 21 4. 1211 5. 111221
1
被读作 "one 1"
("一个一"
) , 即 11
。11
被读作 "two 1s"
("两个一"
), 即 21
。21
被读作 "one 2"
, "one 1"
("一个二"
, "一个一"
) , 即 1211
。
给定一个正整数 n ,输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串。
示例 1:
输入: 1 输出: "1"
示例 2:
输入: 4 输出: "1211"
题目一开始看了有点难懂,看了几遍之后才看懂。。。
ac代码
class Solution {
public:
string countAndSay(int n)
{
string result;
result = trans(n);
return result;
}
private:
string trans(int cout)
{
string b = "1";
string c = "";
char temp;
if(cout == 1)
{
b = "1";
}
else
{
for(int i = 1;i<=cout;i++)
{
if(i > 1)
{
b = c;
c = "";
}
for(int j = 0;j<b.size();j++)
{
int n = 1; //该字符出现了多少次,起码出现1次
temp = b[j];//有几个该字符
while(b[j] == b[j+1])
{
n++;
j++;
}
switch(n)
{
case 1: c += '1';break;
case 2: c += '2';break;
case 3: c += '3';break;
case 4: c += '4';break;
case 5: c += '5';break;
case 6: c += '6';break;
case 7: c += '7';break;
case 8: c += '8';break;
case 9: c += '9';break;
}
c += temp;
}
}
}
return b;
}
};