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.
class Solution {
public:
string countAndSay(int n)
{
if(n==0) return "";
string s="1";
for(int i=2;i<=n;i++)
s=count(s);
return s;
}
string count(string s)
{
string result="";
int index=0;
while(index<s.length())
{
int cnt=0;
char c=s[index];
while(index<s.length() && s[index]==c)
{
index++;
cnt++;
}
result=result+char('0'+cnt);
result=result+c;
}
return result;
}
};
public:
string countAndSay(int n)
{
if(n==0) return "";
string s="1";
for(int i=2;i<=n;i++)
s=count(s);
return s;
}
string count(string s)
{
string result="";
int index=0;
while(index<s.length())
{
int cnt=0;
char c=s[index];
while(index<s.length() && s[index]==c)
{
index++;
cnt++;
}
result=result+char('0'+cnt);
result=result+c;
}
return result;
}
};