蓝桥杯---力扣题库第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转换成字符串作为返回值;

相关推荐
一匹电信狗5 小时前
【C++】异常详解(万字解读)
服务器·c++·算法·leetcode·小程序·stl·visual studio
墨染点香6 小时前
LeetCode 刷题【43. 字符串相乘】
算法·leetcode·职场和发展
Keying,,,,7 小时前
力扣hot100 | 矩阵 | 73. 矩阵置零、54. 螺旋矩阵、48. 旋转图像、240. 搜索二维矩阵 II
python·算法·leetcode·矩阵
_不会dp不改名_8 小时前
leetcode_42 接雨水
算法·leetcode·职场和发展
code小毛孩11 小时前
leetcode hot100数组:缺失的第一个正数
数据结构·算法·leetcode
快去睡觉~21 小时前
力扣400:第N位数字
数据结构·算法·leetcode
gzzeason1 天前
LeetCode Hot100:递归穿透值传递问题
算法·leetcode·职场和发展
qq_513970441 天前
力扣 hot100 Day74
数据结构·算法·leetcode
墨染点香1 天前
LeetCode 刷题【42. 接雨水】
算法·leetcode·职场和发展
xnglan1 天前
蓝桥杯手算题和杂题简易做法
数据结构·数据库·c++·python·算法·职场和发展·蓝桥杯