题目原文:
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.
题目大意:
按规律填空:1,11,21,1211,111221…….
规律是这样的:
1读作“1个1”并写为11;
11读作“2个1”并写为21;
21读作“1个2,1个1”并写为1211
……
求出这个数列的第n项
题目分析:
首先求出第n-1项,然后从头扫第n-1项的字符串,依次统计连续相同字符的个数。
源码:(language:java)
public class Solution {
public String countAndSay(int n) {
if(n==1)
return "1";
else
{
String str=countAndSay(n-1);
int i=0;
String answer="";
while(i<str.length())
{
int j=i;
while(j<str.length() && str.charAt(i)==str.charAt(j))
j++;
if(j>i)
{
answer+=Integer.toString(j-i);
answer+=str.charAt(i);
i=j;
}
else
i++;
}
return answer;
}
}
}
成绩:
36ms,beats 3.03%,众数5ms,16.44%.
cmershen的碎碎念:
本题成绩较差,是因为使用了递归?不过如果不用递归难道不从n-1项推出n项吗?
本题的数列可在OEIS的A005150查到。
本文介绍了一种基于计数和描述规则生成整数序列的方法,并提供了Java实现代码。序列从1开始,后续每一项是对前一项的描述。例如1被描述为11(一个1),11被描述为21(两个1)。文章还分析了递归解决方案的时间效率。
1118

被折叠的 条评论
为什么被折叠?



