美文网首页
[LeetCode]38、报数

[LeetCode]38、报数

作者: 河海中最菜 | 来源:发表于2019-07-28 10:40 被阅读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:
        def countandSay(self, n):
            '''
    
            :param n: 第n项
            :return:
            '''
            # 设置前一项
            i = 1
            res = "1"
            while i < n:
                count = 0
                # 第 i + 1 次报数结果数组
                sb = []
                # 当前上一项第一个数
                c = res[0]
                # 长度+1,因为最后一次的结果没有加入sb数组
                for j in range(len(res) + 1):
                    if j != len(res) and res[j] == c:
                        count += 1
                    else:
                        sb.append(str(count))
                        sb.append(c)
                        # 更新
                        if j != len(res):
                            count = 1
                            c = res[j]
                res = "".join(sb)
                i += 1
            return res
    
    AC38

    相关文章

      网友评论

          本文标题:[LeetCode]38、报数

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