题目如下:
解题思路:
首先需要理解题意,题目的意思是对序列前一个数进行报数:数列第一项为1;那第二项就报数第一项有一个1,输出11;然后第三项在第二项的基础上报数,报数两个1,输出21;第四项根据第三项报数为一个1和一个2,输出 1112;以此类推。
那么解决问题的核心思想就是,通过 递归调用 获取前一个序列,并对前一个序列按照上述规则进行遍历处理得到当前序列。
代码如下:
class Solution {
public:
string countAndSay(int n) {
if(n == 1) //n为1时直接返回“1”
return "1";
string str = countAndSay(n - 1); //递归调用,返回n-1对应的序列
string res; //保存结果
for(int i = 0; i < str.length(); ) //根据序列n-1给出对应的n对应的序列
{
int j = i + 1;
while(str[j] == str[i] && j < str.length())
++j;
int quantity = j - i; //计算序列n-1中连续相同数字的个数
res.push_back(quantity + '0');
res.push_back(str[i]);
i = j;
}
return res;
}
};
版权声明:本文为qq_34018840原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。