蓝桥杯---力扣题库第38题目解析

文章目录

1.题目重述

外观数列实际上就是给你一串数字,我们需要对于这个数据进行一个简单的描述罢了;

2.外观数列举例说明

外观数列都是从1开始的,也就是给定的这个参数n=1的时候,我们返回的就是外观数列的第n个元素,也就是n,这个外观数列里面的元素是存在着规律的;

第一个元素就是1,但是他在我们的这个数组里面的下标是0;

第二个元素是对于第一个元素的描述,因为第一个元素是1,因此这个描述就是一个一,我们写作11,十位的1表示的就是一个,个位的1表示的就是数字1;

第三个元素是对于第二个元素的描述,第二个元素是11,我们读作2个1,写法就是21,十位上面的2表示2个,个位上面的1表示的就是数字1;

第四个元素是对于第三个元素的描述,也就是对于21的描述,这个时候的描述就是1个2,2个1,对吧,因此这个写作就是1221,这个千位的1表示的就是1个,百位的2表示的就是数字2,十位的2表示的就是2个,个位的1表示的就是数字1

综合上面的描述和分析,相信你很快就可以看懂下面的这个官方给的例子:

3.思路分析(双指针+模拟)

下面我们探讨的问题就是针对于一串数字,我们应该如何进行描述,我是使用下面的这个案例进行说明:

下面的这个数字描述应该是5个1,3个2,4个3,但是使用代码的使用,我们应该找到这个里面的规律,如何去使用Java语言对于这个里面的规律进行描述呢?

首先就是定义left,right指针,两个指针都指向第一个元素,right向右移动,直到不是1为止,因为我们需要统计这个过程中的1的个数,这个当right指向第一个二的时候,这个right下标就是5,而这个left=0,这个时候的right-left正好就是我们的1的个数,因此我们可以描述为5个1;

当这个1统计结束之后,我们需要统计2的个数,这个时候重复之前的操作:首先是让left指向我们的right这个时候指向的位置,也就是第一个2,这个时候right继续移动,直到不是2为止,这个时候right-left记录下来这个过程里面的2的个数,以此类推;

4.代码说明

1)首先初始化这个ret,如果n就是1,这个时候返回的外观数列值就是1;

2)接下来的这个for循环是从1开始的,为什么从1开始,因为假设n=2,这个时候我们只需要操作一次这个过程,因为n=1的时候默认这个返回值就是1;

ret表示的是连续相同的字符组成的这个字符串,len表示的是这个连续相同的字符组成的这个字符串的长度,因为我们需要表示是几个什么数字组成的,所以需要知道这个长度;

3)在这个双指针移动的过程中,条件就是left指向的这个字符和right是一样的,我们就让这个right++,但是这个需要防止我们的right越界,最后结束的时候right-left就是字符个数;

4)我们的这个temp.append首先加入的是连续字符的个数,其次是这个字符是什么,也就是我们的left指向的字符元素;

5)最后把这个temp转换成字符串作为返回值;

相关推荐
f狐0狸x2 小时前
【蓝桥杯每日一题】3.16
c++·算法·蓝桥杯
GUIQU.2 小时前
【第14届蓝桥杯】软件赛CB组省赛
蓝桥杯
周Echo周3 小时前
8、STL中的map和pair使用方法
开发语言·数据结构·c++·考研·算法·leetcode·pat考试
武乐乐~3 小时前
欢乐力扣:反转链表
算法·leetcode·链表
tbRNA4 小时前
蓝桥杯备赛 Day0_移动零
职场和发展·蓝桥杯
随风7565 小时前
有多少小于当前数字的数字 力扣1365
数据结构·算法·leetcode
光军oi6 小时前
不像人做的题————十四届蓝桥杯省赛真题解析(上)A,B,C,D题解析
c语言·蓝桥杯·深度优先
肖筱小瀟12 小时前
2025-3-13 leetcode刷题情况(贪心算法--区间问题)
算法·leetcode·贪心算法
肖筱小瀟12 小时前
2025-3-12 leetcode刷题情况(贪心算法--区间问题)
算法·leetcode·贪心算法
小王努力学编程13 小时前
元音辅音字符串计数leetcode3305,3306
开发语言·c++·学习·算法·leetcode