报数

作者: 3ni | 来源:发表于2018-10-07 14:15 被阅读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 项。
    注意:整数顺序将表示为一个字符串。

    示例 1:
    输入: 1
    输出: "1"

    示例 2:
    输入: 4
    输出: "1211"

    class Solution(object):
        def countAndSay(self, n):
            """
            :type n: int
            :rtype: str
            """
            if n == 1:
                return '1'
            nline = '1'
            for i in range(1, n):
                nline = deal(nline)
            return nline
    
    def deal(s):
        line = ''
        i = 0
        while i < len(s):
            st = s[i]
            n = repeatnums(i, s)
            line += (str(n) + st)
            i += n
        return line
    
    def repeatnums(index, s):
        d = s[index]
        n = 0
        for i in range(index, len(s)):
            if d == s[i]:
                n += 1
            else:
                return n
        return n
    

    思路:关键是找到规律,从例子来看,单独一个数会变成两个数,一串重复(相邻)的数也会变成两个数,所以遍历字符串时,碰到单独的则转换为2个数字,碰到相邻重复的数,先统计有多少个重复,然后再进行转换。
    下面例子为题意理解:
    1 为一个一(11)
    11为两个一(21)
    111为三个一(31)
    2为一个二(12)
    22为两个二(22)
    222为三个二(32)
    2222为四个二(42)
    12为一个一(11),一个二(12),最后为1112
    123为一个一(11),一个二(12),一个三(13),最后为111213
    1331为一个一(11),两个三(23),一个一(11),最后为112311

    相关文章

      网友评论

          本文标题:报数

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