力扣精选100道——外观数列(模拟专题)

外观数列算法题链接

🚩了解题意

该题的下面充分的给你说明了这个题目的意思。 3  3  2  2   2   5   1 我们根据我们正常读的顺序读

俩个3 三个2 一个5 一个1

连起来就是 2 3  3  2  1  5  1 这就是最终输出的字符串。

题目开头说了,我们最初是 1开始读取。

样例是n=4,
那么我们读取4是 1211,我们读取1 只有一个1 
那么2对应的值就是11(1个1的转换),
那么3就是21(2个1的转换),
4就是1211(一个2一个1的转换)

如果遇到连续相同的数字 ,我们需要总读,如果1112,我们不能三个1分开读,一个1一个1一个1一个2,这样的结果不还是1112吗,不能重复读,我们需要将连续相同的1的个数先弄清楚,1112中连续相同的1是三个,2是单独就1个。如果出现11123311,这种1不是连续的我们不用加,我们只要连续相同的,不是连续的后续出现了相同的数字也是分开读了。 

所以11123311 应该读成 3个1 一个2 俩个3 俩个1.


🚩算法原理

其实从上面了解题意的过程中,我们发现一个地方

如果遇到连续相同的数字 ,需要将连续相同的数字对应的个数相加然后读。

我们针对n=5来进行思考,一组数组,我们看到有三个1,那么我们就需要写成【3 1】,然后继续接下来是2个2 ,我们就得写成【2 2】,后面是1个1,我们学成【1 1】.我们注意到,最终得到的【】花括号里前面一个数是连续相同数字的个数,后面一个数是当前的数字

前面一个数是记录连续相同数字的个数,后面的数是记录当前的数,那么我们这一题很明显是用双指针,left和right都是从0开始,遇到相同的数,right++,直到遇到不同的数,我们获取的连续相同的数字长度是right-left,然后left对应的值就是【】右边代表当前的数字,right-left就是几个,left对应的值就是几,几个几,就是这样读。然后left直接更新到right即可,然后继续循环,直到right大于这个字符串的长度即可。

right一直++,遇到right对应的值不等于left对应的值的时候,我们就更新结果,本题是数字字符,需要用到to_string将数字转成字符串,right-left=3转换成 "3",然后记录left对应的值,"3"+"1";

此时我们将left移到right对应的位置进行继续让right继续++判断。


我们的right不能一直++,到了字符串长度截至,所以我们再判断的时候,也需要加上right的移动范围的限制。


🚩实现代码

class Solution {
public:string countAndSay(int n) {string ret="1";//起初设置字符串是1for(int i=1;i<n;i++){string tmp;//设置临时的字符串for(int left=0,right=0;right<ret.size();){while(right<ret.size() && ret[left]==ret[right])right++;//如果left和right对应的值相等,那么right++tmp+=to_string(right-left)+ret[left];//直到不相等,我们就将数字转字符right-left代表有几个相同的,再加上ret的left对应的值left=right;//然后将right给left继续循环}ret=tmp;}return ret;}
};

前行的路上,永远做自己光。

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

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

相关文章

想设计智能手环,我需要设计哪种电路?

随着电子技术的高速发展&#xff0c;可穿戴设备逐渐火爆&#xff0c;其中之一是智能手环&#xff0c;作为现代可穿戴技术的热门产品之一&#xff0c;它集成了多种功能&#xff0c;如健康检测、运动跟踪、通知提醒等&#xff0c;为了实现这些功能&#xff0c;需要用上哪些电路模…

【DDD】学习笔记-薪资管理系统的测试驱动开发2

测试驱动开发的过程 满足简单设计并编写新的测试 当代码满足重用性和可读性之后&#xff0c;就应遵循简单设计的第四条原则“若无必要&#xff0c;勿增实体”&#xff0c;不要盲目地考虑为其增加新的软件元素。这时&#xff0c;需要暂时停止重构&#xff0c;编写新的测试。 …

【深入理解设计模式】原型设计模式

原型设计模式 原型设计模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许通过复制已有对象来创建新对象&#xff0c;而无需直接依赖它们的具体类。这种模式通常用于需要频繁创建相似对象的场景&#xff0c;以避免昂贵的创建操作或初始化过…

Spring篇----第三篇

系列文章目录 文章目录 系列文章目录前言一、使用 Spring 有哪些方式?二、什么是 Spring IOC 容器?三、什么是依赖注入?四、可以通过多少种方式完成依赖注入?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这…

Ansible 更换aliyun 镜像 并下载tree

目录 查看系统版本找到对应 的版本对当前镜像进行备份下载aliyuan更换成功安装扩展源更换源之后 的三个命令 这里安装一个aliyun 的镜像 本案例 仅供实验参考 生产环境中请谨慎使用 查看系统版本 先查看linux 的系统 版本 ansible slave -m shell -a uname -a找到对应 的版本…

【办公类-16-10-02】“2023下学期 6个中班 自主游戏观察记录(python 排班表系列)

背景需求&#xff1a; 已经制作了本学期的中4班自主游戏观察记录表 【办公类-16-10-01】“2023下学期 中4班 自主游戏观察记录&#xff08;python 排班表系列&#xff09;-CSDN博客文章浏览阅读398次&#xff0c;点赞10次&#xff0c;收藏3次。【办公类-16-10-01】“2023下学…

邮件发送/接收过程分析、常见邮箱sport/dport列举、检测规则开发思路分析

一、邮件发送和接收过程分析 &#xff08;转载自&#xff1a;邮件的发送和接收过程——STMP、POP、IMAP、MIME_当收件人接收电子邮件时自己的邮件服务器通过什么收文件-CSDN博客&#xff09; 电子邮件发送协议 是一种基于“ 推 ”的协议&#xff0c;主要包括 SMTP &#xff1…

javaweb day3 day4 day5

js 引入方式 写法 基础语法 写法 变量 写法 数据类型 运算符 与java相同 会判断类型是否相同 循环控制语句 和java相同 函数&#xff08;方法&#xff09; 写法 Array数组 写法 string字符串 写法 js自定义对象 写法 JSON 写法 BOM window 写法 location 写法 DOM 案例…

TensorFlow2.x 精选笔记(1)数据基本操作与线性代数

学习参考&#xff1a; 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning 一、数组与张量 虽然张量看起来是复杂的对象&#xff0c;但它们可以理解为向量和矩阵的集合。理解向量和矩阵对于理解张量至关重要。 向量是元素的一维列表&#xff0c;向量是一…

【这个词(Sequence-to-Sequence)在深度学习中怎么解释,有什么作用?】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;深度学习笔记 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; Sequence-to-Sequence&#xff08;Seq2Seq&#xff09; Sequence-to-Sequence&#xff08;Seq2Seq…

【深度学习笔记】卷积神经网络——填充和步幅

填充和步幅 在前面的例子 fig_correlation中&#xff0c;输入的高度和宽度都为 3 3 3&#xff0c;卷积核的高度和宽度都为 2 2 2&#xff0c;生成的输出表征的维数为 2 2 2\times2 22。 正如我们在 sec_conv_layer中所概括的那样&#xff0c;假设输入形状为 n h n w n_h\tim…

linux前端部署

安装jdk 配置环境变量 刷新配置文件 source profile source /etc/profile tomcat 解压文件 进去文件启动tomcat 开放tomcat的端口号 访问 curl localhsot:8080 改配置文件 改IP,改数据库名字&#xff0c;密码&#xff0c; 安装数据库 将war包拖进去 访问http:…