LeeCode题库第三十八题

38.外观数列 

项目场景:

「外观数列」是一个数位字符串序列,由递归公式定义:

  • countAndSay(1) = "1"
  • countAndSay(n) 是 countAndSay(n-1) 的行程长度编码。

    行程长度编码(RLE)是一种字符串压缩方法,其工作原理是通过将连续相同字符(重复两次或更多次)替换为字符重复次数(运行长度)和字符的串联。例如,要压缩字符串 "3322251" ,我们将 "33" 用 "23" 替换,将 "222" 用 "32" 替换,将 "5" 用 "15" 替换并将 "1" 用 "11" 替换。因此压缩后字符串变为 "23321511"

    给定一个整数 n ,返回 外观数列 的第 n 个元素。

    示例 1:

    输入:n = 4

    输出:"1211"

    解释:

    countAndSay(1) = "1"

    countAndSay(2) = "1" 的行程长度编码 = "11"

    countAndSay(3) = "11" 的行程长度编码 = "21"

    countAndSay(4) = "21" 的行程长度编码 = "1211"

    示例 2:

    输入:n = 1

    输出:"1"

    解释:

    这是基本情况。

    提示:

    • 1 <= n <= 30


    问题描述

            代码的初始条件是n为1直接返回字符1,紧接着从第二项开始生成,每一项都是对前一项的描述,先设置pre为say的第一个元素,如果后面元素和pre相同那么count加1,说明这个数字出现的次数多了1,如果不等,那么将次数和字符以列表的形式加入到列表中,每次子循环结束后将say变为cur_say,最后将列表转换为字符串输出即可。 

    class Solution:
        def countAndSay(self, n: int) -> str:
            if n==1:
                return "1"
            say=["1"]
            for _ in range(2,n+1):
                pre=say[0]
                cur_say=[]
                count=1
                for c in say[1:]:
                    if c==pre:
                        count+=1
                    else:
                        cur_say.extend([str(count),pre])
                        pre=c
                        count=1
                cur_say.extend([str(count),pre])
                say=cur_say
            return "".join(say)
                
    
    
            

            本题提交情况。

    LeeCode题库第三十八题_第1张图片 

             以上为本篇文章的全部内容,感谢你抽出宝贵的时间阅读这篇文章。如果你有任何疑问或建议,欢迎在评论区留言,我们一起交流进步。愿你的代码之路越走越顺,生活充满阳光!     

    你可能感兴趣的:(LeeCode题库,算法,python,leetcode)