美文网首页
38. 报数

38. 报数

作者: 衣锦昼行 | 来源:发表于2019-07-11 22:17 被阅读0次

报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
1 1
2 11
3 21
4 1211
5 111221
1 被读作 "one 1" ("一个一") , 即 11。
11 被读作 "two 1s" ("两个一"), 即 21。
21 被读作 "one 2", "one 1" ("一个二" , "一个一") , 即 1211。
给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串。
思路:本来以为可以直接将30项直接写出来,写到10多项时发现后面的序列长度非常的长,于是就放弃了,所以可以根据模拟的方法来实现,根据相同数字的个数进行移动计算,比如第五项:111221,从1开始,设置一个num计数器,初始为1,移动计算1连在一起的个数,每增加一个,num+1,连在一起的1有3个则将字符串+num+1,然后依次循环计算.

public String countAndSay(int n) {
        if(n==1)
            return "1";
        String str = "1";
        int num=1;
        String ans="";
        for(int i=1;i<n;i++){
            ans="";
            for(int j=0;j<str.length();j++){
                if(j+1<str.length()&&str.charAt(j+1)==str.charAt(j)){
                    num++;
                }
                else {
                    ans+=String.valueOf(num);
                    ans+=str.charAt(j);
                    num=1;
                }
            }
            str=ans;
        }
        return ans;
    }

时间复杂度:O(N*M),N最大是30,所以时间长短主要取决于M的大小,项数越靠后时间复杂度越大。
空间复杂度:O(M),需要维护一个长字符串。

相关文章

  • 38.报数

    题目报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下: 1 11 21 1211 ...

  • 38. 报数

    文|Seraph 01 | 问题 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下...

  • 38. 报数

    LeetCode 的算法题 PHP解法记录 报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。...

  • 38. 报数

  • 38. 报数

    题目描述 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下: 1 11 21 12...

  • 38. 报数

    一、题目原型: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下: 二、示例剖析:...

  • 38. 报数

    报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1 12 113 214 121...

  • 38.报数

    题目描述: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下: 1 11 21 1...

  • 38. 报数

    报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下: 1 11 21 1211 11...

  • 38.报数

    报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下: 1 被读作 "one 1" ...

网友评论

      本文标题:38. 报数

      本文链接:https://www.haomeiwen.com/subject/vyijkctx.html