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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值