<LeetCode天梯>Day022 外观数列(递归+双指针) | 初级算法 | Python

举报
府学路18号车神 发表于 2022/05/11 16:03:24 2022/05/11
【摘要】 以下为我的天梯积分规则:每日至少一题:一题积分+10分 若多做了一题(或多一种方法解答),则当日积分+20分(+10+10)若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60)初始分为100分若差一天没做题,则扣积分-10分(周六、周日除外注:休息)坚持!!! 初级算法 刷题目录 字符串 题干给定一个正整数 ...

以下为我的天梯积分规则

每日至少一题:一题积分+10分
若多做了一题(或多一种方法解答),则当日积分+20分(+10+10)
若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60


初始分为100分
若差一天没做题,则扣积分-10分(周六、周日除外注:休息
坚持!!!


初级算法

刷题目录

字符串

在这里插入图片描述

题干

给定一个正整数 n ,输出外观数列的第 n 项。

「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。

你可以将其视作是由递归公式定义的数字字符串序列:

  • countAndSay(1) = “1”
  • countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。

前五项如下:
在这里插入图片描述
要 描述 一个数字字符串,首先要将字符串分割为 最小 数量的组,每个组都由连续的最多 相同字符 组成。然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组。要将描述转换为数字字符串,先将每组中的字符数量用数字替换,再将所有描述组连接起来。

例如,数字字符串 “3322251” 的描述如下图:

在这里插入图片描述
示例1

输入:n = 1
输出:“1”
解释:这是一个基本样例。

示例2

输入:n = 4
输出:“1211”
解释
countAndSay(1) = “1”
countAndSay(2) = 读 “1” = 一 个 1 = “11”
countAndSay(3) = 读 “11” = 二 个 1 = “21”
countAndSay(4) = 读 “21” = 一 个 2 + 一 个 1 = “12” + “11” = “1211”

提示

  • 1 <= n <= 30

递归法+双指针

分析:

根据上面的规则,输入的是n,输出第n次描述,也就是描述上一层的数字。
这里得用上递归的思想,每一次都进行迭代,然后根据输入的n,作为停止的判断,然后直接输出当前层的描述。
依次读取上一层,先对每一个字符进行索引,判断是否相同,直到不同,记下相同的个数用于描述,再继续读取,读到不同,则停止,每次不同都停止,切片,然后做计算,最后再描述。递归此过程。
需要先定义好出口,当n=1时,输出为1.

class Solution:
    def countAndSay(self, n: int) -> str:
    if n == 1:
        return "1"		# 设置递归出口

    # 假设我们上一层的结果为“112213”
    s1 = countAndSay(n-1)  # 递归
    res = ''    # 设置新串
    slow = 0       # 慢指针
    fast = 1	   # 快指针
    s1 += '0'      # 末尾标志,因为不会出现0
    while fast < len(s1):
        if s1[slow] != s1[fast]:                    # 判断是否数字相同
            res += str(fast-slow) + str(s1[slow])   # 前半部分表示后半部分的个数
            slow = fast								# 遇到不同,将快指针位置赋值给慢指针
        fast += 1									

    return res

在这里插入图片描述
递归感觉不是那么的快,需要多理解理解!

还有一种动态规划的办法。

动态规划

今天就先到这儿吧,明天再更新新方法!~

Reference

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnpvdm/
来源:力扣(LeetCode)


今日得分:+10
总得分:470

加油!!!

❤坚持读Paper,坚持做笔记,坚持学习,坚持刷力扣LeetCode❤!!!
坚持刷题!!!打天梯!!!
To Be No.1

⚡⚡


创作不易⚡,过路能❤关注收藏点个赞三连就最好不过了

ღ( ´・ᴗ・` )


灯火欲离失,轻影黯花湿。微浮半谋面,我与泪三痴!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。