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

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

以下为我的天梯积分规则:


每日至少一题:一题积分+10分

若多做了一题(或多一种方法解答),则当日积分+20分(+10+10)

若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60)


初始分为100分

若差一天没做题,则扣积分-10分(周六、周日除外注:休息)

坚持!!!


初级算法

刷题目录

字符串


image.png

image.png

题干

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


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


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


countAndSay(1) = “1”

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

前五项如下:

image.png

要 描述 一个数字字符串,首先要将字符串分割为 最小 数量的组,每个组都由连续的最多 相同字符 组成。然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组。要将描述转换为数字字符串,先将每组中的字符数量用数字替换,再将所有描述组连接起来。


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

image.png

示例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

image.png


相关文章
|
24天前
|
算法 搜索推荐 JavaScript
基于python智能推荐算法的全屋定制系统
本研究聚焦基于智能推荐算法的全屋定制平台网站设计,旨在解决消费者在个性化定制中面临的选择难题。通过整合Django、Vue、Python与MySQL等技术,构建集家装设计、材料推荐、家具搭配于一体的一站式智能服务平台,提升用户体验与行业数字化水平。
|
2月前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
168 26
|
1月前
|
存储 算法
算法入门:专题一:双指针(有效三角形的个数)
给定一个数组,找出能组成三角形的三元组个数。利用“两边之和大于第三边”的性质,先排序,再用双指针优化。固定最大边,左右指针从区间两端向内移动,若两短边之和大于最长边,则中间所有组合均有效,时间复杂度由暴力的O(n³)降至O(n²)。
|
2月前
|
机器学习/深度学习 编解码 算法
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
273 4
|
2月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于A*算法的机器人路径规划研究(Python代码实现)
【机器人路径规划】基于A*算法的机器人路径规划研究(Python代码实现)
393 4
|
2月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于深度优先搜索(Depth-First-Search,DFS)算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于深度优先搜索(Depth-First-Search,DFS)算法的机器人路径规划(Python代码实现)
210 3
|
2月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
151 0
|
2月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
189 0
|
12月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
1051 13
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
476 4

热门文章

最新文章

推荐镜像

更多