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
n
th sequence.
Note: The sequence of integers will be represented as a string.
» Solve this problem
[Thoughts]
string-operation. The only trick thing is Line11. seq[seq.size()] always '\0'. It will help to save an "if" statement.
class Solution {
public:
string countAndSay(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(n==1)
{
return "1";
}
string prev=countAndSay(n-1);
stringstream resultstream;
string tmp=prev.substr(0,1);
int count=1;
for(int i=1;i<prev.size();i++)
{
if(prev.substr(i,1)==tmp)
{
count++;
}
else
{
resultstream<<count<<tmp;
count=1;
tmp=prev.substr(i,1);
}
}
resultstream<<count<<tmp;
return resultstream.str();
}
};