LeetCode--38.外观数列

前言:之前我不是说,我后续可能会讲一下递归吗,现在它来了,这道题会用到回溯的方法,并且比较纯粹哦

解题思路:

        1.获取信息:(下面这些信息差不多是力扣上面的题目信息了,所以我这一环节在这次题解中的意义不大)

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

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

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

                要求给定一个整数n,返回外观数列的第n个元素,即返回递归公式代入n后的值

        2.分析题目:

                它给出了递归公式,就是提醒你,可以使用递归来解决这道题

                并且说明了行程长度编码压缩字符串的原理,更方便你理解了嘛

                现在来讲一下递归:(你可以结合我下面代码来进行理解)

                我们都知道,那些使用递归的题中,一般一个函数里面是嵌套着一个相同的函数对吧

                例如 Find()函数里面套一个Find()函数

                这就是递归的关键之一,你可以理解成,里面套着的那个函数是开启外面这个函数的“钥匙”

                现在,外面里面有了一个嵌套的函数对吧,那么在代码执行到那个嵌套的函数时,我们知道,代码是一段一段执行的,对吧,那么在执行完这个嵌套的函数之前,下面的代码它是不会执行的对吧,所以在获取到“钥匙”之前,下面的代码是不会进行操作的

                那么,你是不是可以讲它看作是一个深入的过程,它在深入到一定程度后,就会结束,即:获取到“钥匙”,就会开始执行下面的代码,即开始执行外部函数

                那么它深入地程度,你可以来进行规定,比如设置一个条件,满足这个条件就返回,就可以返回较浅的层面

                这样的话,就有了很多钻空子的操作,我举一个现实的例子来抽象地说一下吧

                比如一个车间需要加工一把椅子,老板给你说,让你安排一下,做好了就把自己白富美的女儿嫁给你,让你走上人生巅峰

                你现在要做一把椅子,你知道需要椅子的腿,椅子的靠背,椅子的垫子来组成椅子

                你没有这些东西,你就算知道怎么把它们组合起来,也不能操作,因为巧妇难为无米之炊(这就是我说的,缺少“钥匙”,你不能进行外部函数下面的代码操作)

                这个时候就需要这些东西对吧,那你就需要再加一个更深层次的步骤,将自己的需求传递给这个更深层次的部门

                这个更深层次的部门的操作就是将木材加工成上述东西,但是又没有木材,也不能开启它们的操作

                需要木材,我们知道,木材就是这次加工的最底线了,对吧,这个底线是人为规定的,意思就是我们希望它是底线,那就是底线,这里就是我说的,深入到一定程度时,需要一个条件来阻止它继续深入,你可以理解成,这个工厂才是你考虑得范围,至于木材怎么来的,你不用管,你只用管你该管的范围,即:题目要求的范围

                现在我们取得了木材,那么就返回到了较浅的步骤,就是加工木材的步骤,工人获取了木材,即:“钥匙”,那就可以进行后续操作了,它们进行后续操作了之后,就返回他们加工的东西

                我现在获得了组合椅子需要的东西,现在我就可以进行我下面的操作了,我完成了之后,就是结果了,可以交给老板验货

                迎娶白富美,走上人生巅峰,毕竟,人人都想成为达叔,软饭硬吃

        3.示例查验: 

                你可以结合示例,来品味一下递归,(上面说的,其实比较偏向回溯,但递归的核心思想还是不会变的)

        4.尝试编写代码:

                (1)回溯法

                        思路就不过多阐述了,这道题比较纯粹,就直接上代码了

class Solution {
public:string countAndSay(int n) {if(n==1)return "1";string str=countAndSay(n-1),res;int num=1,size=str.size();for(int i=1;i<=size;i++){if(i==size){res+=(num+'0');res+=str[i-1];break;}if(str[i]==str[i-1])num++;else{res+=(num+'0');res+=str[i-1];num=1;}}return res;}
};

                (2)打表嘛

                        思路:给出了n的范围是1到30,那你直接把1到30每个数得到的结果列举出来,输入n后,直接返回对应结果就可以了,这里就不写代码了,太麻烦了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86840.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86840.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器的安装与安全设置

1&#xff1a;安装操作系统 1、创建虚拟机Win49&#xff08;49为序号&#xff09;&#xff0c;并安装Windows Server 2019操作系统 参考配置&#xff1a;安装系统的分区大小为20GB&#xff0c;其余分区暂不划分&#xff0c; 文件系统格式为NTFS&#…

Sensodrive SensoJoint机器人力控关节模组抗振动+Sensodrive力反馈系统精准对接

Sensodrive成立于2003年&#xff0c;起源于德国航空航天中心&#xff08;DLR&#xff09;的LBR项目。公司由一批传感器技术专家创立&#xff0c;专注于高精度工业扭矩传感器的研发。凭借二十余年的技术积累&#xff0c;Sensodrive将DLR轻型机器人扭矩技术引入工业领域&#xff…

【AI实践】Mac一天熟悉AI模型智能体应用(百炼版)

25.6.29增加Gummy 实时/一句话语音识别25.6.28增加Qwen TTS本地音频和实时播报 背景 准备环境 MacOS M1电脑&#xff08;其他M系列芯片也可以&#xff09; 为了方便python的使用环境&#xff0c;使用Miniconda&#xff1a;下载链接&#xff1a;Download Anaconda Distribution…

WEB安全--Java安全--jsp webshell免杀1

1.1、BCEL ClassLoader 介绍&#xff08;仅适用于BCEL 6.0以下&#xff09;&#xff1a; BCEL&#xff08;Apache Commons BCEL™&#xff09;是一个用于分析、创建和操纵Java类文件的工具库&#xff1b;BCEL的类加载器在解析类名时会对ClassName中有$$BCEL$$标识的类做特殊处…

Valkey与Redis评估对比:开源替代方案的技术演进

#作者&#xff1a;朱雷 文章目录 1 概述1.1内存数据结构存储核心特性1.2主流内存数据结构存储设计与适用场景1.3目前主流内存数据结构存储对比 2 Valkey 说明2.1 哨兵架构设计2.2 集群架构设计2.3 valkey 使用企业和业内生态‌ 3 评估指标4 评估结果 1 概述 内存数据结构存储…

华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio安装NoteGen AI笔记应用程序

华为云FlexusDeepSeek征文 | 基于华为云ModelArts Studio安装NoteGen AI笔记应用程序 引言一、ModelArts Studio平台介绍华为云ModelArts Studio简介ModelArts Studio主要特点 二、NoteGen介绍NoteGen简介主要特点 三、安装NoteGen工具下载NoteGen软件安装NoteGen工具 四、开通…

BUUCTF在线评测-练习场-WebCTF习题[BJDCTF2020]Easy MD51-flag获取、解析

解题思路 打开靶场&#xff0c;有个提交框&#xff0c;输入后url会出现我们提交的参数password http://a48577ed-9a1c-4751-aba0-ae99f1eb8143.node5.buuoj.cn:81/leveldo4.php?password123 查看源码并没用发现什么猫腻&#xff0c;抓包在响应头发现了猫腻 hint: select * …

面向对象三大特性深度解析:封装、继承与多态

面向对象三大特性深度解析&#xff1a;封装、继承与多态 思维导图概览 #mermaid-svg-v2u0XIzKotjyXYei {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-v2u0XIzKotjyXYei .error-icon{fill:#552222;}#mermaid-svg-v2…

mmap映射物理内存之三invalid cache

目录 流程设计 invalid 命令 内核态invalid 内核态invalid&#xff0c;用户态mmap物理地址 PAN机制 PAN机制历程 硬件支持 ARMv8.1-PAN 特性 Linux 内核的适配 软件模拟 PAN&#xff08;SW PAN&#xff09; 背景 Linux 的实现 总结 前述刷新cache的流程也同样可…

记忆化搜索(dfs+memo)无环有向图

这是一道可以当作板子的极简记忆化搜索 建立a 是邻接表&#xff0c;其中 a[x] 存储从节点 x 出发能到达的所有节点。 b[x] 记录从节点 x 出发的所有边的权重之和。根据数学原理&#xff0c;我们很容易发现&#xff0c;一个根&#xff08;起点&#xff09;的期望&#xff0c;等…

使用AI豆包写一个车辆信息管理页面

记录一个基本的车辆信息管理页面&#xff0c;由豆包撰写完成&#xff0c;只需要微调页面即可。 主要功能是车辆信息的查询、新增、编辑&#xff0c;项目用到了uniapp、vue3、ts、uni-ui、z-paging 页面效果如下&#xff1a; 以上界面均由豆包生成&#xff0c;完成度非常高&am…

《HarmonyOSNext应用防崩指南:30秒定位JS Crash的破案手册》

《HarmonyOSNext应用防崩指南&#xff1a;30秒定位JS Crash的破案手册》 ##Harmony OS Next ##Ark Ts ##教育 本文适用于教育科普行业进行学习&#xff0c;有错误之处请指出我会修改。 &#x1f4a5; 哇哦&#xff01;JS Crash崩溃日志完全解析手册 当你的应用突然闪退时&am…

阅读笔记(3) 单层网络:回归(下)

阅读笔记(3) 单层网络:回归(下) 该笔记是DataWhale组队学习计划&#xff08;共度AI新圣经&#xff1a;深度学习基础与概念&#xff09;的Task03 以下内容为个人理解&#xff0c;可能存在不准确或疏漏之处&#xff0c;请以教材为主。 1. 为什么书上要提到决策理论&#xff1f; …

Mac OS系统每次开机启动后,提示:输入密码来解锁磁盘“Data”,去除提示的解决方法

问题描述&#xff1a; Mac mini外接了一个磁盘&#xff08;EX_Mac&#xff09;为默认使用的系统盘&#xff0c;内置的硬盘&#xff08;Macintosh HD&#xff09;为Mac mini自带的系统盘 外置硬盘系统每次开机都会挂载内置磁盘&#xff0c;同时会提示需要输入密码来解锁磁盘“…

CSS Flex 布局中flex-shrink: 0使用

flex-shrink: 0 是 CSS Flexbox 布局中的一个关键属性&#xff0c;用于禁止弹性项目&#xff08;flex item&#xff09;在容器空间不足时被压缩。以下是详细解释和示例&#xff1a; 核心作用 当容器的可用空间小于所有弹性项目的总宽度&#xff08;或高度&#xff09;时&#…

WHERE 子句中使用子查询:深度解析与最佳实践

&#x1f50d; WHERE 子句中使用子查询&#xff1a;深度解析与最佳实践 在 WHERE 子句中使用子查询是 SQL 的高阶技巧&#xff0c;可实现动态条件过滤。以下是全面指南&#xff0c;涵盖语法、类型、陷阱及优化策略&#xff1a; &#x1f4dc; 一、基础语法结构 SELECT 列 FR…

从0到1:不文明现象随手拍小程序开发日记(一)

前期调研 不文明现象随手拍小程序&#xff1a;在城市的快速发展进程中&#xff0c;不文明现象时有发生&#xff0c;为了有效解决这一问题&#xff0c;提升城市文明程度&#xff0c; 市民若发现不文明行为&#xff0c;如乱扔垃圾、随地吐痰、破坏公共设施、违规停车等&#xff…

STM32F103之SPI软件读写W25Q64

一、W25Q64简介 1.1 简介 W25Q64(Nor flash)、 24位地址&#xff0c;64Mbit/8MByte、是一种低成本、小型化、使用简单的非易失性存储器&#xff0c;常用于数据存储、字库存储、固件程序存储等场景 时钟频率&#xff1a;最大80MHz(STM32F103系统时钟为72MHz…

vue3+element-plus 组件功能实现 上传功能

一、整体功能概述 这段代码实现了一个基于 Vue 3 和 Element Plus 组件库的文件导入及预览功能模块。主要包含了一个主导入对话框&#xff08;用于上传文件、展示文件相关信息、进行导入操作等&#xff09;以及一个用于预览文件内容的预览对话框。支持导入特定格式&#xff08;…

OpenCV中创建Mat对象

第1章 创建Mat对象 1.1. 创建空的 Mat 对象 cv::Mat mat; 1.2. 创建灰度图像 // 创建一个 3 行 4 列、8位无符号单通道矩阵&#xff08;相当于灰度图&#xff09; cv::Mat mat(3, 4, CV_8UC1); 1.3. 创建彩色图像 // 创建三通道矩阵&#xff08;相当于彩色图像&#xff0…