problem:
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.
这道题主要是题意的理解。当n=1时,初始为1;
当n=2时,看前面是1,则获得该位置上的值11;
依次生成后面的数。
可以这样理解,n代表数列的第几个。
而数列的生成方式是由前面的数字获得。可以联想到斐波那契数列,当前数是由前面两个数生成。
理解好题意,就可以通过递归的方式依次获得结果就好。
class Solution {
public:
string convert(string str)
{
int length = str.length();
if(length == 1)
return "1"+str;
string result;
int count = 1;
for(int i=1; i<length; i++)
{
if(str[i-1] == str[i])
count++;
else
{
char num = count + '0';
result = result + num + str[i-1];
count = 1;
}
if(i == length - 1)
{
char num = count + '0';
result = result + num + str[i];
}
}
return result;
}
string countAndSay(int n) {
if(n == 1)
return "1";
string result = "1";
for(int i=1; i<n; i++)
{
result = convert(result);
}
return result;
}
};