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.
题目意思有点绕口,其实想说的就是每说出一个数,然后就用它的规矩根据这个数说出下一个数字,这个规矩就是:从字符串开始相同的字符c有n个,就表示为nc,如此直至这个字符串结束。起始位字符串1,求递归的第n个字符串。这样说出题意就很好解了。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string myitoa( int n );
class Solution {
public:
string countAndSay(int n) {
string s = "1";
for( int i = 1;i < n;++i ) {
string temp;
string::iterator it = s.begin();
while( it != s.end() ) {
int count = 0;
char c = *it;
while( *it == c )
++it,++count;
temp = temp + myitoa(count) + c;
}
s = temp;
}
return s;
}
};
int main()
{
int n;
Solution test;
while( cin >> n )
cout << test.countAndSay(n) << endl;;
return 0;
}
string myitoa( int n )
{
string s;
char c;
while( n > 0 ) {
c = n % 10 + '0';
s += c;
n /= 10;
}
reverse(s.begin(),s.end());
return s;
}