LeetCode(38)外观数列⭐⭐

 

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

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

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

前五项如下:

1.     1
2.     11
3.     21
4.     1211
5.     111221
第一项是数字 1 
描述前一项,这个数是 1即 “ 一 个 1 ”,记作 "11"
描述前一项,这个数是 11即 “ 二 个 1 ” ,记作 "21"
描述前一项,这个数是 21即 “ 一 个 2 + 一 个 1 ” ,记作 "1211"
描述前一项,这个数是 1211即 “ 一 个 1 + 一 个 2 + 二 个 1 ” ,记作 "111221"

要 描述 一个数字字符串,首先要将字符串分割为 最小 数量的组,每个组都由连续的最多 相同字符 组成。然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组。要将描述转换为数字字符串,先将每组中的字符数量用数字替换,再将所有描述组连接起来。

示例 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"

思想:定义一个初始串,依次得到每项的字符串内容,保存并更新上一个字符串。

class Solution {public String countAndSay(int n) {String s = "1";for (int i = 1; i < n; ++i) {StringBuilder sb = new StringBuilder();int start = 0;int pos = 0;while (pos < s.length()) {while (pos < s.length() && s.charAt(pos) == s.charAt(start)) {pos++;}sb.append(Integer.toString(pos - start)).append(s.charAt(start));start = pos;}s = sb.toString();}return s;}
}

佬的代码

 

class Solution {public String countAndSay(int n) {if (n == 1) {return "1";}String prev = countAndSay(n - 1);StringBuilder result = new StringBuilder();int count = 1;for (int i = 0; i < prev.length(); i++) {if (i + 1 < prev.length() && prev.charAt(i) == prev.charAt(i + 1)) {count++;} else {result.append(count).append(prev.charAt(i));count = 1;}}return result.toString();}
}

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

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

相关文章

Element UI:时间组件,支持开始结束时间任选其一

一、背景 Element-UI中时间段组件el-date-picker&#xff0c;需要开始时间和结束时间都选择上&#xff0c;但是业务场景更多的是区间中可以只选择其中一个或开始时间和结束时间都选择 1.el-date-picker&#xff1a;开始时间与结束时间必须同时选择 2.业务需求&#xff1a;开…

计算机创新协会冬令营——暴力枚举题目06

我给大家第一阶段的最后一道题就到这里了&#xff0c;下次得过段时间了。所以这道题简单一点。但是足够经典 下述题目描述和示例均来自力扣&#xff1a;两数之和 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target …

R2 + PicGo:教你搭建免费图床并实现快速上传和压缩图片

图片是网站中的重要元素&#xff0c;它们可以增加视觉效果&#xff0c;吸引读者的注意力&#xff0c;传达信息和情感。但是&#xff0c;图片也会占用很多的存储空间和流量&#xff0c;如果您使用传统的图床服务&#xff0c;可能会遇到以下问题&#xff1a;费用高昂、速度慢、容…

雨课堂作业整理2

第十九次作业 1.设 G G G 为无环图&#xff0c;如果把 G G G 的每条边都染上颜色&#xff0c;使得相邻的边的颜色不同&#xff0c;则这种染法为边着色。该说法&#xff08; &#xff09;。 A.正确 B.错误 2.设 G G G 如下图所示&#xff0c;则 G G G 是 3 3 3 边可着色的…

电商要怎么学?企业如何进行数字化转型打破市场僵局?

电商要怎么学&#xff1f;企业如何进行数字化转型打破市场僵局&#xff1f; 电商的学习需要从多个方面入手&#xff0c;首先需要了解电商的基本概念和原理&#xff0c;包括电商平台的运营模式、商品推广、客户服务等。此外&#xff0c;还需要掌握电商平台的操作技能&#xff0c…

[ABAP] 修改SAP网页端登录界面

文章目录 前言一、配置服务二、Class实现1. 创建类2. 重写方法 三、测试四、附 - 自动登录 前言 我们在SICF配置一些HTTP服务使用之后使用时&#xff0c;打开网页会提示输入账号密码&#xff0c;但是这个会以弹窗形式出现。 这对客户体验是很不友好的&#xff0c;这篇文章将会…

经典目标检测YOLO系列(一)YOLOV1的复现(1)总体架构

经典目标检测YOLO系列(一)实现YOLOV1网络(1)总体架构 实现原版的YOLOv1并没有多大的意义&#xff0c;因此&#xff0c;根据《YOLO目标检测》(ISBN:9787115627094)一书&#xff0c;在不脱离YOLOv1的大部分核心理念的前提下&#xff0c;重构一款较新的YOLOv1检测器&#xff0c;来…

web学习笔记(九)

目录 1.初识JS(JavaScript) 1.1什么是JavaScript&#xff1f; 1.2HTML5 CSS3 javaScript三者的关系 1.3 JAVAScript的作用 1.4JAVAScript的组成部分 1.5JS注释 1.6补充知识 2.JS的引入方法 2.1行内式 2.2嵌入式&#xff08;内嵌式&#xff09; 2.3外链式 3.输入和…

支持API文档生成,API管理工具:Apipost

随着数字化转型的加速&#xff0c;API&#xff08;应用程序接口&#xff09;已经成为企业间沟通和数据交换的关键。而在API开发和管理过程中&#xff0c;API文档、调试、Mock和测试的协作显得尤为重要。Apipost正是这样一款一体化协作平台&#xff0c;旨在解决这些问题&#xf…

LeetCode(31) 下一个排列

整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地&#xf…

centos 7.9安装RocketMQ4.6.1版本

1.先下载二进制文件 下载 | RocketMQ 2.下载后&#xff0c;进行解压 unzip rocketmq-all-4.6.1-bin-release.zip 3.修改JVM配置 进到/datadrive/rocketmq-all-4.6.1-bin-release/bin下编辑runserver.sh 与 runbroker.sh文件 根据个人虚拟机大小进行修改 vi runserver.sh J…

ubuntu 22 virt-manger(kvm)安装winxp

安装 、启动 virt-manager sudo apt install virt-manager sudo systemctl start libvirtdsudo virt-manager安装windowsXP 安装过程截图如下 要点1 启用 “包括寿终正寝的操作系统” win_xp.iso 安装过程 &#xff1a; 从winXp.iso启动, 执行完自己重启从硬盘重启&#xff0c…