countAndSay(leetcode)

来源:互联网 发布:网页游戏优化 编辑:程序博客网 时间:2024/04/27 13:25

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;}


0 0