38. 外观数列

38. 外观数列

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

「外观数列」是一个整数序列,从数字 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"
要 描述 一个数字字符串,首先要将字符串分割为 最小 数量的组,每个组都由连续的最多 相同字符 组成。然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组。要将描述转换为数字字符串,先将每组中的字符数量用数字替换,再将所有描述组连接起来。

例如,数字字符串 “3322251” 的描述如下图:
在这里插入图片描述

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

解题思路

由递归公式定义的数字字符串序列:

  • countAndSay(1) = “1”
  • countAndSay(n) 是对 countAndSay(n-1) 的描述

对countAndSay(n-1) 的描述本质上就是解析字符串,获取字符串中连续字符的出现的次数,将字符出现次数和字符组成新的字符串,使用递归的方法,不断地对下一层返回的字符串进行解析,直到到达递归边界1.

代码

class Solution {public String countAndSay(int n) {return n==1?"1":parse(countAndSay(n-1));}public String parse(String n) {char pre=n.charAt(0);int cnt=1;StringBuilder sb = new StringBuilder();for (int i=1;i<n.length();i++){if (n.charAt(i)==pre)cnt++;else {sb.append(cnt).append(pre);pre=n.charAt(i);cnt=1;}}sb.append(cnt).append(pre);return sb.toString();}}

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

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

相关文章

JavaScript进阶(一)--执行上下文

在下工科生一枚&#xff0c;自认为文笔烂大街&#xff01;本着总结JavaScript原理知识&#xff0c;提升自我写作水平的目的&#xff0c;提笔写下这几篇文章&#xff0c;喷子们高抬贵手?。写作过程中本系列过程中&#xff0c;我会尽快写完全部内容&#xff0c;再回过头来优化补…

Lab1

1.导入 JUnit&#xff0c;Hamcrest Project -> Properites -> Java Build Path -> Add External JARs 2. 安装 Eclemma Help -> Eclipse marketplace 搜索 Eclemma&#xff0c;点击Installed 3. 测试代码 TrianglePractice&#xff1a; public class TrianglePract…

抽象类细分举行_什么是用聚类技术聚类的客户细分

抽象类细分举行This content was originally posted in Spanish here https://blogs.solidq.com/es/poder-del-dato/que-es-el-clustering-segmenta-a-tus-clientes-con-machine-learning/此内容最初以西班牙语发布在此处https://blogs.solidq.com/es/poder-del-dato/que-es-el…

551. Student Attendance Record I 从字符串判断学生考勤

&#xff3b;抄题&#xff3d;&#xff1a; You are given a string representing an attendance record for a student. The record only contains the following three characters: A : Absent. L : Late.P : Present. A student could be rewarded if his attendance record…

使用deploy命令上传jar到私有仓库

打开cmd命令提示符&#xff0c;mvn install是将jar包安装到本地库&#xff0c;mvn deploy是将jar包上传到远程server&#xff0c;install和deploy都会先自行bulid编译检查&#xff0c;如果确认jar包没有问题&#xff0c;可以使用-Dmaven.test.skiptrue参数跳过编译和测试。 全命…

282. 给表达式添加运算符

282. 给表达式添加运算符 给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target &#xff0c;在 num 的数字之间添加 二元 运算符&#xff08;不是一元&#xff09;、- 或 * &#xff0c;返回所有能够得到目标值的表达式。 示例 1:输入: num "123", targ…

java 在底图上绘制线条_使用底图和geonamescache绘制k表示聚类

java 在底图上绘制线条This is the third of four stories that aim to address the issue of identifying disease outbreaks by extracting news headlines from popular news sources.这是四个故事中的第三个&#xff0c;旨在通过从流行新闻来源中提取新闻头条来解决识别疾病…

python selenium处理JS只读(12306)

12306为例 js "document.getElementById(train_date).removeAttribute(readonly);" driver.execute_script(js)time2获取当前时间tomorrow_time 获取明天时间 from selenium import webdriver import time import datetime time1datetime.datetime.now().strftime(&…

Mac上使用Jenv管理多个JDK版本

使用Java时会接触到不同的版本。大多数时候我在使用Java 8&#xff0c;但是因为某些框架或是工具的要求&#xff0c;这时不得不让Java 7上前线。一般情况下是配置JAVA_HOME&#xff0c;指定不同的Java版本&#xff0c;但是这需要人为手动的输入。如果又要选择其他版本&#xff…

交互式和非交互式_发布交互式剧情

交互式和非交互式Python中的Visual EDA (Visual EDA in Python) I like to learn about different tools and technologies that are available to accomplish a task. When I decided to explore data regarding COVID-19 (Coronavirus), I knew that I would want the abilit…

5886. 如果相邻两个颜色均相同则删除当前颜色

5886. 如果相邻两个颜色均相同则删除当前颜色 总共有 n 个颜色片段排成一列&#xff0c;每个颜色片段要么是 ‘A’ 要么是 ‘B’ 。给你一个长度为 n 的字符串 colors &#xff0c;其中 colors[i] 表示第 i 个颜色片段的颜色。 Alice 和 Bob 在玩一个游戏&#xff0c;他们 轮…

Sunisoft.IrisSkin.SkinEngine 设置winform皮肤

Sunisoft.IrisSkin.SkinEngine se; se new Sunisoft.IrisSkin.SkinEngine { SkinAllForm true, SkinFile "..\..\skin\EmeraldColor2.ssk" };Sunisoft.IrisSkin.SkinEngine skin new Sunisoft.IrisSkin.SkinEngine(); //具体样式文件 地址&#xff0c;可以自行修…

docker 相关操作

docker-compose down //关闭所有容器 docker-compose up //开启所有容器docker-compose restart //重启所有容器单独更新某个容器时用脚本$ docker ps // 查看所有正在运行容器 $ docker stop containerId // containerId 是容器的ID$ docker ps -a // 查看所有容器 $…

电子表格转换成数据库_创建数据库,将电子表格转换为关系数据库,第1部分...

电子表格转换成数据库Part 1: Creating an Entity Relational Diagram (ERD)第1部分&#xff1a;创建实体关系图(ERD) A Relational Database Management System (RDMS) is a program that allows us to create, update, and manage a relational database. Structured Query …

【Vue.js学习】生命周期及数据绑定

一、生命后期 官网的图片说明&#xff1a; Vue的生命周期总结 var app new Vue({el:"#app", beforeCreate: function(){console.log(1-beforeCreate 初始化之前);//加载loading},created: function(){console.log(2-created 创建完成);//关闭loading},be…

5885. 使每位学生都有座位的最少移动次数

5885. 使每位学生都有座位的最少移动次数 一个房间里有 n 个座位和 n 名学生&#xff0c;房间用一个数轴表示。给你一个长度为 n 的数组 seats &#xff0c;其中 seats[i] 是第 i 个座位的位置。同时给你一个长度为 n 的数组 students &#xff0c;其中 students[j] 是第 j 位…

Springboot(2.0.0.RELEASE)+spark(2.1.0)框架整合到jar包成功发布(原创)!!!

一、前言 首先说明一下&#xff0c;这个框架的整合可能对大神来说十分容易&#xff0c;但是对我来说十分不易&#xff0c;踩了不少坑。虽然整合的时间不长&#xff0c;但是值得来纪念下&#xff01;&#xff01;&#xff01;我个人开发工具比较喜欢IDEA&#xff0c;创建的sprin…

求一个张量的梯度_张量流中离散策略梯度的最小工作示例2 0

求一个张量的梯度Training discrete actor networks with TensorFlow 2.0 is easy once you know how to do it, but also rather different from implementations in TensorFlow 1.0. As the 2.0 version was only released in September 2019, most examples that circulate …

docker环境 快速使用elasticsearch-head插件

docker环境 快速使用elasticsearch-head插件 #elasticsearch配置 #进入elk容器 docker exec -it elk /bin/bash #head插件访问配置 echo #head插件访问# http.cors.enabled: true http.cors.allow-origin: "*" >>/etc/elasticsearch/elasticsearch.yml#重启el…

476. 数字的补数

476. 数字的补数 给你一个 正 整数 num &#xff0c;输出它的补数。补数是对该数的二进制表示取反。 例 1&#xff1a;输入&#xff1a;num 5 输出&#xff1a;2 解释&#xff1a;5 的二进制表示为 101&#xff08;没有前导零位&#xff09;&#xff0c;其补数为 010。所以你…