38.leetcode 外观数列(简单)

leetcode python 刷题记录,从易到难

一、题目

在这里插入图片描述
在这里插入图片描述

二、解答

1.思路

本题思路类似26,27题,都需要找到重复的次数。

  1. 根据n开始循环,因为已经定义了1所以需要循环n-1次。
  2. 定义快慢双指针指向0,定义临时变量。双指针用来找到重复的次数,临时变量用来存储找到的结果(数字出现次数和数字本身)。
  3. 遍历数字字符串,如果快指针找到和慢指针不一样的,慢指针指向的数字重复次数就等于快指针指向的索引减慢指针指向的索引,此时把找到的数字重复次数和数字本身拼接起来存储到零食变量里,然后慢指针指向快指针的位置。
    注意:这个循环只能找出前几个数字的重复次数例如,1211,只能找出1重复1次,2重复1次,但11这个字符串里1重复几次,这里是不能知道的。
  4. 把3.找到的字符串拼接上最后一个子串的重复次数和数字本身即可。如果只有一个子串,类似1或11。此时前面3.返回的tmp就会是空字符串,把这个子串当做最后一个子串处理,直接拼接最后一个子串中数字的重复次数和数字本身即可。

2.实现

class Solution:
    def countAndSay(self, n: int) -> str:
        list_str = "1"
        for i in range(n-1):
            x = 0
            tmp = ""
            for index in range(len(list_str)):
                if list_str[x] != list_str[index]:
                    tmp = tmp + str(index-x) + list_str[x]
                    x = index
            list_str = tmp + str(len(list_str)-x) + list_str[-1]
        return list_str

3.提交

在这里插入图片描述

4.Github地址

https://github.com/m769963249/leetcode_python_solution/blob/master/easy/38.py

猜你喜欢

转载自blog.csdn.net/qq_39945938/article/details/108698406
今日推荐