count and say

 1 ```
 2 class Solution{
 3     string result;
 4     public:
 5     //根据数组前一个数,count and say 构造出后一个数
 6         void generate(string s,string &result)
 7         {
 8             result=string();
 9             string::iterator i=s.begin();
10             while(i != s.end())
11             {
12                 char cur=*i;
13                 int count=1;
14                 i++;
15                 while(i != s.end() && *i == cur)
16                 {
17                     count++;
18                     i++;
19                 }
20                 result.push_back(count+'0');
21                 result.push_back(cur);
22 
23             }
24 
25         }
26         //n相当于数组的下标,n是几就调用上面的函数几次,这样就反复调用,每次都以前一个为参数,得到答案
27         string countAndSay(int n){
28 
29             for(int i=1;i<n;i++)
30             {
31                 
32                 generate(result,result);
33             }
34             return result;
35         }
36 };
37 
38 ```

首先,我们发现一点,那个数组中前一个数字按照count and say的方式译码的结果就是后一个数,那么我先写了一个函数,功能是给定前一个数,计算出后一个数。

那么要实现的是求出第n个数,直接循环n-1次,每次的输入是上一次的输出即可。

原文地址:https://www.cnblogs.com/gaoduan/p/4055218.html