关闭

Easy-题目50:38. Count and Say

103人阅读 评论(0) 收藏 举报
分类:

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:64515次
    • 积分:3286
    • 等级:
    • 排名:第10725名
    • 原创:270篇
    • 转载:53篇
    • 译文:0篇
    • 评论:8条
    文章分类
    最新评论