【算法 | 模拟No.3】leetcode 38. 外观数列

news2024/10/7 8:23:20

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【手撕算法系列专栏】【Leetcode】
🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助
🍓希望我们一起努力、成长,共同进步。

原题链接:点击直接跳转到该题目

目录

  • 1️⃣题目描述
  • 2️⃣题目解析
  • 3️⃣解题代码

1️⃣题目描述

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

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

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

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

在这里插入图片描述
示例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

2️⃣题目解析

本题涉及的算法:双指针、模拟。

双指针的作用如下:

  • 用于统计字符串的连续相同字符个数。其中,左指针left指向当前统计字符的起始位置,右指针right向后扫描,直到找到第一个与[left, right)区间中元素不同的位置(注意这里是左闭右开),此时区间中相同字符的个数就是right - left,将这个结果与区间内的字符一起更新tmp字符串,然后将左指针left更新为当前right所指向的位置。重复上述步骤,直到遍历原字符串中的所有字符。

3️⃣解题代码

class Solution {
public:
    string countAndSay(int n) {
        string ret = "1";
        for(int i = 1;i < n;i++)
        {
            string tmp;
            int len = ret.size();
            for(int left = 0,right = 0;right < len;)
            {
                while(ret[left] == ret[right] && right < len) right++;
                tmp += to_string(right - left) + ret[left];
                left = right;
            }
            ret = tmp;
        }
        return ret;
    }
};

最后就顺利通过啦!!!

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

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

相关文章

threejs BufferGeometry更新了顶点后,可能导致部分位置拾取失效

产生现象的操作&#xff1a; 通过点击线上的点&#xff0c;去更新线的BufferGeometry&#xff0c;导致&#xff0c;只能在更新顶点坐标之前的线的区域上才能被拾取到 解决办法 mesh.geometry.computeBoundingSphere();

Vue - Syntax Error: TypeError: this.getOptions is not a function 项目运行时报错,详细解决方案

报错问题 关于此问题网上的教程都无法解决,如果您的报错与本文相似,本文即可 100% 完美解决。 在 vue2.js 项目中,执行 npm run serve 运行时出现如下报错信息, Syntax Error: TypeError: this.getOptions is not a function 解决方案 按照以下步骤,即可完美解决。 这个错…

9.斐波那契数列

斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;也称之为黄金分割数列&#xff0c;由意大利数学家列昂纳多・斐波那契&#xff08;Leonardo Fibonacci&#xff09;提出。斐波那契数列指的是这样的一个数列&#xff1a;1、1、2、3、5、8、13、21、34、………

基于Qt QProcess获取linux启动的程序、QScreen 截屏、GIF动画实现

在Linux中,可以使用QProcess类来获取已启动的程序。以下是一个示例代码: #include <QCoreApplication>#include <QProcess>int main(int argc, char *argv[]){QCoreApplication a(argc, argv); // 创建一个QProcess对象 QProcess process; // 设置执行…

关系数据理论 规范化

码&#xff08;Key&#xff09; 候选码&#xff1a;某一属性组的值可唯一标识一个元组&#xff0c;其子集不能&#xff0c;该属性组为候选码&#xff08;如学生表中的学号&#xff0c;成绩表中学号课程号&#xff09; R<U,F> K是R的候选码 主属性&#xff1a;候选…

什么GAN生成对抗网络?生成对抗网络可以干什么?

生成对抗网络(Generative Adversarial Nets,简称GAN)。神经网络分很多种,有普通的前向传播网络,有分析图片的CNN卷积神经网络,有分析系列化数据比如语言、文字的RNN循环神经网络,这些神经网络都是用来输入数据,得到想要的结果,我们看中的是这些神经网络中很好地将数据与…

Python 机器学习入门:数据集、数据类型和统计学

机器学习是通过研究数据和统计信息使计算机学习的过程。机器学习是迈向人工智能&#xff08;AI&#xff09;的一步。机器学习是一个分析数据并学会预测结果的程序。 数据集 在计算机的思维中&#xff0c;数据集是任何数据的集合。它可以是从数组到完整数据库的任何东西。 数…

3线SPI驱动 HX8347 TFT屏

老五家2.8寸屏&#xff0c;3线SPI驱动 前言 要知道屏幕的驱动芯片都小的惊人&#xff0c;想必是不会打上丝印的。从几百个引脚中判断哪个是哪个&#xff0c;想想就晕。 大佬们都太厉害了&#xff0c;看看PFC就知道屏幕的接线定义。一直好奇这种神技是怎么练成的。也尝试自己来…

Excel宏标记在所有工作表中标记关键字(以域名为例)并将结果输出到另一张Sheet

Excel宏标记在所有工作表中标记关键字(以域名为例)并将结果输出到另一张Sheet 因为我的需求是标记一组url&#xff0c;所以使用正则进行匹配&#xff0c;将匹配到的url标红&#xff0c;并将标记结果统计输出到新建的名为“标记结果”的Sheet中 效果如下&#xff1a; 统计页 …

jeecgboot vue3使用JAreaSelect地区选择组件时返回省市区的编码,如何获取到选择地区的文字

JAreaSelect文档地址&#xff1a;添加链接描述 当我们的BasicForm表单组件中使用选择省市区的JAreaSelect组件时&#xff0c;获取到的返回值是地区的编码&#xff0c;如“530304”这样子&#xff0c;但我在小程序中展示数据的时候需要明确的地址&#xff0c;如“云南省昆明市五…

WordPress主题 JustNews主题6.0.1(亲测首页不空白)

介绍 资源入口 需要用WordPress5.X版本 JustNews介绍&#xff1a;一款专为博客、自媒体、资讯类的网站设计开发的WordPress主题&#xff0c;自v3.0版开始支持自主研发的前端用户中心&#xff0c;不仅支持注册、登录、账户设置、个人中心等常用页面的添加&#xff0c;还可以上传…

wandb报错Network error (ProxyError), entering retry loop

解决方案&#xff1a;改成离线模式 import os import wandb os.environ[“WANDB_API_KEY”] ‘KEY’ os.environ[“WANDB_MODE”] “offline” 原因&#xff1a; 使用wandb在线模式运行代码&#xff0c;服务器是一边运行我们的代码一边向wandb官网上传我们的数据&#xff0…

如何使用Pyarmor保护你的Python脚本

目录 一、Pyarmor简介 二、使用Pyarmor保护Python脚本 1、安装Pyarmor 2、创建Pyarmor项目 3、添加Python脚本 4、配置执行环境 5、生成保护后的脚本 三、注意事项与未来发展 四、未来发展 五、总结 本文深入探讨了如何使用Pyarmor工具保护Python脚本。Pyarmor是一个…

Python和BeautifulSoup库的魔力:解析TikTok视频页面

概述 短视频平台如TikTok已成为信息传播和电商推广的重要渠道。用户通过短视频分享生活、创作内容&#xff0c;吸引了数以亿计的观众&#xff0c;为企业和创作者提供了广阔的市场和宣传机会。然而&#xff0c;要深入了解TikTok上的视频内容以及用户互动情况&#xff0c;需要借…

SpringSecurity6 | 委派筛选器代理和过滤器链代理

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; Java从入门到精通 ✨特色专栏&#xf…

世微 AP2400 宽电压降压恒流驱动IC 过EMC认证线路方案

产品描述 AP2400 是一款 PWM 工作模式,外围简单、外驱功率管&#xff0c;适用于 5-100V 输入的高精度降压 LED 恒流驱动芯片。外 驱 MOS&#xff0c;输出电流可达 6A。 AP2400 可实现三段功能切换&#xff0c;通过 MODE1/2/3 切换三种功能模式&#xff1a;全亮&#xff0c; 半亮…

电子式电表和智能电表哪个更适合家用?

随着科技的发展&#xff0c;家用电力设备也在不断升级。电子式电表和智能电表作为两种常见的电表类型&#xff0c;究竟哪个更适合家用呢&#xff1f;今天&#xff0c;小编将会从多个角度进行全面分析&#xff0c;帮助大家做出明智的选择。 一、工作原理及准确性比较 1.电子式电…

vue 点击滑动到页面指定位置(点击下滑滚动)的功能

需求 点击页面上的 文字 滑动到页面指定位置 三种方法 document.getElementById(show).scrollIntoView() // 默认滚动至节点置顶document.getElementById(show).scrollIntoView(false) // 默认滚动至节点显示document.getElementById(show).scrollIntoView({ behavior: &quo…

【电路笔记】-并联RLC电路分析

并联RLC电路分析 文章目录 并联RLC电路分析1、概述2、AC的行为3、替代配置3.1 带阻滤波器3.2 带通滤波器 4、总结 电子器件三个基本元件的串联行为已在我们之前的文章系列 RLC 电路分析中详细介绍。 在本文中&#xff0c;介绍了另一种称为并联 RLC 电路的关联。 在第一部分中&a…

MySQL事务机制,事务与并发

mysql应对并发设立了四种事务机制&#xff1a; READ UNCOMMITEDREAD COMMITZEDREPEATABLE READSERIALIZABLE 以上按照串行程度排序 READ UNCOMMITED只要有人修改&#xff0c;我都能读到&#xff0c;不论是不是commited&#xff0c;但这有问题&#xff0c;万一A修改了&#xf…