Easy-题目50:38. Count and Say

来源:互联网 发布:淘宝物流单号怎么填 编辑:程序博客网 时间:2024/05/22 08:09

题目原文:
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查到。

0 0
原创粉丝点击