当前位置: 首页 > 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;}
}

http://www.lryc.cn/news/359404.html

相关文章:

  • 如何解决Ubuntu中软件包安装时的404错误(无法安装gdb、cgddb等)
  • SpringBoot中MyBatisPlus的使用
  • 前后端交互:axios 和 json;springboot 和 vue
  • 前端技术专家岗(虚拟岗)
  • redis windows环境下的部署安装
  • 大字体学生出勤记录系统网页HTML源码
  • 筛斗数据提取技术在企业成本预测中的应用
  • enum编程入门:探索枚举类型的奥秘
  • 刷机 iPhone 进入恢复模式
  • 计算属性和侦听器:为什么在某些情况下使用计算属性比使用methods更好,如何使用侦听器来监听数据的变化。
  • 一文带你搞懂大事务的前因后果
  • 关系数据库:关系运算
  • 微信公众号开发(三):自动回复“你好”
  • docker基本操作命令(3)
  • 003 MySQL
  • 数据分析------统计学知识点(一)
  • Apache Doris 基础 -- 数据表设计(分区分桶)
  • 题目:求0—7所能组成的奇数个数。
  • 网络协议学习笔记
  • C语言文件操作:打开关闭,读写
  • 启智CV机器人,ROS,ubuntu 20.04 【最后一步有问题】
  • React-生成随机数和日期格式化
  • 11Linux学习笔记
  • 004 仿muduo实现高性能服务器组件_Buffer模块与Socket模块的实现
  • 研发效能DevOps: Ubuntu 部署 JFrog 制品库
  • hadoop学习笔记
  • 使用dockerfile快速构建一个带ssh的docker镜像
  • linux部署运维1——centos7.9离线安装部署涛思taos2.6时序数据库TDengine
  • Linux shell编程学习笔记51: cat /proc/cpuinfo:查看CPU详细信息
  • Ps:调整画笔工具