当前位置: 首页 > news >正文

【LeetCode】38.外观数列

外观数列

题目描述:

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

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

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

给定一个整数 n ,返回 外观数列 的第 n 个元素。

示例 1:

输入:n = 4

输出:"1211"

解释:

countAndSay(1) = "1"

countAndSay(2) = "1" 的行程长度编码 = "11"

countAndSay(3) = "11" 的行程长度编码 = "21"

countAndSay(4) = "21" 的行程长度编码 = "1211"

示例 2:

输入:n = 1

输出:"1"

解释:

这是基本情况。

提示:

  • 1 <= n <= 30

思路分析:

        根据题意进行模拟,从起始条件 k=1 时 ans = "1" 出发,逐步递推到 k=n 的情况,对于第 k 项而言,其实就是对第 k−1项的「连续段」的描述,而求「连续段」长度,可以使用双指针实现。

代码实现注解:

class Solution {public String countAndSay(int n) {//设ans的初始值为1String ans = "1";for(int i= 2; i<=n;i++){//cur用来存放当前连续段String cur = "";//len为前一个连续段的长度int len = ans.length();//遍历前一个连续段得到当前描述for(int j = 0;j<len; ){//k指向当前遍历位置int k = j+1;//判断前后两数是否相同,相同则累加while(k<len && ans.charAt(j) == ans.charAt(k))k++;//cnt用来记录重复数的个数int cnt = k-j;//拼接得到curcur += cnt + "" + ans.charAt(j);//将j移动到当前遍历位置j = k;}ans = cur;}return ans;}
}

相关文章:

  • 第P9周:YOLOv5-Backbone模块实现
  • Leetcode刷题笔记7
  • Java集合【超详细】2 -- Map、可变参数、Collections类
  • 探索Web前端三大主流框架:Angular、React和Vue.js
  • 城市公共交通IC卡消费流程
  • Superset二次开发之更新 SECRET_KEY
  • springboot+vue 社区养老服务系统
  • MySQL中,不能在一个DML(数据操纵语言,如INSERT, UPDATE, DELETE)语句中直接引用目标表进行子查询
  • python 第一天
  • Java----Maven详解
  • Redis常用命令大全
  • 【安装笔记-20240529-Windows-Wireshark 网络协议分析工具】
  • PHP:集成Xunsearch生成前端搜索骨架
  • 关于智慧校园安全用电监测系统的设计
  • Docker搭建FRP内网穿透服务器
  • hexo+github搭建个人博客
  • Computed property XXX was assigned to but it has no setter
  • ES10 特性的完整指南
  • Java Agent 学习笔记
  • JS基础之数据类型、对象、原型、原型链、继承
  • LeetCode29.两数相除 JavaScript
  • Linux后台研发超实用命令总结
  • supervisor 永不挂掉的进程 安装以及使用
  • vue 个人积累(使用工具,组件)
  • VUE es6技巧写法(持续更新中~~~)
  • 笨办法学C 练习34:动态数组
  • 入手阿里云新服务器的部署NODE
  • 实战|智能家居行业移动应用性能分析
  • 数组的操作
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​什么是bug?bug的源头在哪里?
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • # Kafka_深入探秘者(2):kafka 生产者
  • #考研#计算机文化知识1(局域网及网络互联)
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • %check_box% in rails :coditions={:has_many , :through}
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (定时器/计数器)中断系统(详解与使用)
  • (二)斐波那契Fabonacci函数
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (十六)串口UART
  • (四) Graphivz 颜色选择
  • (转)c++ std::pair 与 std::make
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .net SqlSugarHelper
  • .NET 读取 JSON格式的数据
  • .NetCore项目nginx发布
  • .NET和.COM和.CN域名区别
  • .NET开源纪元:穿越封闭的迷雾,拥抱开放的星辰
  • .NET项目中存在多个web.config文件时的加载顺序