题目
原题链接
算法
- 题目规定每一项都是上一项的描述,规定第一项是"1",第一项的描述是1个1,因而第二项是"11",第二项的描述是2个1,因而第三项是"21",这样递归描述下去
- 由题意可知,如果想求第n项就必须就第n-1项(在没有打表的情况下),这是很典型的递归结构,因此本题选用递归方法来解决
- 算法过程:
1.如果是1直接返回1;
2.如果n>1,则求第n-1项;
3.在第n-1项的基础上依据定义求出第n项
4.返回结果 - 我们可以发现本题的关键是如何由第n-1项求第n项,具体看代码
AC代码(c++)
class Solution {
public:
string countAndSay(int n) {
if(n==1)
return "1";
string cas=countAndSay(n-1);
string result="";
char c=cas[0];
int times=1;
for(int i=1;i<cas.size();i++)
{
if(cas[i]==cas[i-1])
times++;
else
{
result=result+to_string(times)+c;
c=cas[i];
times=1;
}
}
result=result+to_string(times)+c;
return result;
}
};