首页 > 代码库 > count and say

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次,每次的输入是上一次的输出即可。

count and say