• 38. 外观数列


    「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:
    1. 1
    2. 11
    3. 21
    4. 1211
    5. 111221
    解释:
    1 被读作 "one 1" ("一个一") , 即 11。
    11 被读作 "two 1s" ("两个一"), 即 21。
    21 被读作 "one 2", "one 1" ("一个二" , "一个一") , 即 1211。



    思路:详见注释。
    初始字符串是:“1”,用ans字符串存放结果
    遍历字符串,变量tar记录遇到的字符,变量index记录tar出现的次数
    ————当指针指向的字符与tar相同时,将index自增1;
    ————当指针指向的字符与tar不同时,将index和tar添加到ans的末尾。

     1 class Solution(object):
     2     def countAndSay(self, n):
     3         """
     4         :type n: int
     5         :rtype: str
     6         """
     7         # 第一趟结果已知,不参与循环
     8         result = "1"
     9         n -= 1
    10         # 循环n-1趟
    11         while n > 0:
    12             # 初始化拼接字符串
    13             ans = ""
    14             # 记录当前字符,初始为原串首字符
    15             tar = result[0]
    16             # 计数器
    17             count = 1
    18             # 遍历原串,拼接结果字符串
    19             for i in range(1, len(result)):
    20                 # 指针指向的字符等于记录字符,计数器加1
    21                 if result[i] == tar:
    22                     count += 1
    23                 # 不相等,拼接结果串,并在之后重置记录字符、计数器
    24                 else:
    25                     # 字符串拼接
    26                     ans += str(count) + tar
    27                     # 重置
    28                     tar = result[i]
    29                     count = 1
    30             # 字符串拼接
    31             ans += str(count) + tar
    32             # 重置原字符串
    33             result = ans
    34             # 循环趟数减1
    35             n -= 1
    36         return result
    37 
    38 if __name__ == '__main__':
    39     solution = Solution()
    40     print(solution.countAndSay(1))
     
     
  • 相关阅读:
    基于C++CJAVA的python入门
    雁栖湖健身计划
    显存的一些知识
    Cuda_bank-conflict
    翻译文章进展
    一些CV界的好资源
    how processor caches work
    LINQ-进阶的扩展方法
    LINQ-基础
    CTFHUB-技能树 基础知识 ctf练习平台
  • 原文地址:https://www.cnblogs.com/panweiwei/p/12681988.html
Copyright © 2020-2023  润新知