力扣38.外观数列

news2024/9/25 9:38:06

文章目录

  • 力扣38.外观数列
    • 题目描述
    • 方法1:按规则生成(顺序暴力法)

力扣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”
要 描述 一个数字字符串,首先要将字符串分割为 最小 数量的组,每个组都由连续的最多 相同字符 组成。然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组。要将描述转换为数字字符串,先将每组中的字符数量用数字替换,再将所有描述组连接起来。
示例 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

方法1:按规则生成(顺序暴力法)

最简单易懂的方法,直接按照题目所给规则从1到n顺序生成所需要的外观序列,虽然思路及其简单但在用C语言实现上比较繁琐
算法描述如下:

  • 设立n个字符串数组,来保存1-n个外观序列的结果,并初始化第0个字符串数组的值为“1”,即第1外观序列.
  • 从下标为1的数组开始,即从第2个外观序列开始按规律填写
  • 分析第i-1个已知序列的字符串,遍历该字符串,顺序统计每段连续数字出现的个数并填写到第i个新的外观字符串结果数组中
  • 最终返回第n个外观序列,即二维数组中的第n-1个数组
  • 时间复杂度O(n^2)
char * countAndSay(int n){
    char **countAndSays=(char **)malloc(sizeof(char *)*n),temp[30],c;
    int i,j,k,count;
    for(i=0;i<n;i++)  countAndSays[i]=(char *)calloc(sizeof(char),5000);
    countAndSays[0][0]='1';//初始化填写第一个外观数列
    countAndSays[0][1]='\0';
    for(i=1;i<n;i++)//从二个外观数列开始,依次填写生成每一个外观数列
    {
        j=0;//从位置0开始遍历第i-1个数列
        count=0;//该段连续数字的统计值初始为0
        c=countAndSays[i-1][j];//c表示该段出现的连续数字
       while(countAndSays[i-1][j]!='\0')//遍历第i-1个数列
       {
          while(countAndSays[i-1][j]==c)//统计一段连续出现的数字数量
          {
              count++;
              j++;
          }
          //将count和c转化为字符串形式,如count=123,c='2',应转换为字符串形式的:'1232'
          //为此每次将count%10获得末尾数字并从temp数组的倒数第二位置向前填入,而temp数组最后一位应填入字符c
          k=28;//temp数组的倒数第二位置
          while(count)
          {
              temp[k--]=count%10+'0';
              count/=10;
          }
          temp[29]=c;
          strncat(countAndSays[i],temp+k+1,30-k-1);//将temp数组统计到的连续字符结果填入
          c=countAndSays[i-1][j];//更新下一个连续字符
          count=0;
       }
    }
   return countAndSays[n-1];
}

在这里插入图片描述

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

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

相关文章

这才是计算机科学_人工智能

人工智能一、前言二、ML2.1 分类2.1.1 决策树2.2.2 支持向量机2.2.3 人工神经网络三、计算机视觉3.1 Prewitt算子3.2 Viola-Jones 人脸检测算法3.3 卷积神经网络四、自然语言处理4.1 知识图谱4.2 语音识别一、前言 之前讲了计算机从发展到现在的过程&#xff0c;计算机很适合做…

[软件工程导论(第六版)]第2章 可行性研究(课后习题详解)

文章目录1. 在软件开发的早期阶段为什么要进行可行性研究&#xff1f;应该从哪些方面研究目标系统的可行性&#xff1f;2. 为方便储户&#xff0c;某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员输入系统&#xff0c;如果是存款&#xff0c;系统记录存款人姓名…

ThreadLocal 内存泄漏问题

1. 认识ThreadLocal java中提高了threadlocal&#xff0c;为每个线程保存其独有的变量&#xff0c;threadlocal使用的一个小例子是&#xff1a; public class ThreadLocalTest {public static void main(String[] args) {ThreadLocal<String> threadIds new ThreadLoc…

FreeRTOS系统延时函数分析

FreeRTOS提供了两个系统延时函数&#xff0c;相对延时函数vTaskDelay()和绝对延时函数vTaskDelayUntil()。相对延时是指每次延时都是从任务执行函数vTaskDelay()开始&#xff0c;延时指定的时间结束&#xff0c;绝对延时是指每隔指定的时间&#xff0c;执行一次调用vTaskDealyU…

操作系统闲谈07——系统启动

操作系统闲谈07——系统启动 一、BIOS启动 BIOS程序不需要由谁加载&#xff0c;本身便固化在ROM只读存储器中。 开机的一瞬间 cs:ip 便被初始化为0xf000 : 0xfff0。开机的时候处于实模式&#xff0c;其等效地址为0xffff0&#xff0c;如上图所示此地址为BIOS的入口地址。 建立…

C/C++每日一练(20230218)

目录 1. 整数转罗马数字 2. 跳跃游戏 II 3. 买卖股票的最佳时机 IV 1. 整数转罗马数字 罗马数字包含以下七种字符&#xff1a; I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X …

物联网中RocketMQ的使用

物联网中RocketMQ的使用 1. 背景 随着物联网行业的发展、智能设备数量越来越多&#xff0c;很多常见的智能设备都进入了千家万户&#xff1b;随着设备数量的增加&#xff0c;也对后台系统的性能提出新的挑战。 在日常中&#xff0c;存在一些特定的场景&#xff0c;属于高并发请…

Java数据类型、基本与引用数据类型区别、装箱与拆箱、a=a+b与a+=b区别

文章目录1.Java有哪些数据类型2.Java中引用数据类型有哪些&#xff0c;它们与基本数据类型有什么区别&#xff1f;3.Java中的自动装箱与拆箱4.为什么要有包装类型&#xff1f;5.aab与ab有什么区别吗?1.Java有哪些数据类型 8种基本数据类型&#xff1a; 6种数字类型(4个整数型…

java ssm志愿者信息服务平台springmvc

志愿者服务平台&#xff0c;采用ssm框架技术&#xff0c;java语言&#xff0c;jsp前端页面以及js&#xff0c;DIVCSS&#xff0c;html5等技术综合应用开发实现。志愿者服务平台&#xff0c;采用了前台后台的模式开发&#xff0c;前台用于志愿者在线项目培训&#xff0c;视频学习…

CUDA编程接口

编程接口 文章目录编程接口3.1利用NVCC编译3.1.1编译流程3.1.1.1 离线编译3.1.1.2 即时编译3.1.2 Binary 兼容性注意&#xff1a;仅桌面支持二进制兼容性。 Tegra 不支持它。 此外&#xff0c;不支持桌面和 Tegra 之间的二进制兼容性。3.1.3 PTX 兼容性3.1.4 应用程序兼容性3.1…

Kafka框架快速入门及异步通知

文章目录1、异步通信原理1.1 观察者模式1.2 生产者消费者模式1.3 缓冲区1.4 数据单元2、消息系统原理2.1 点对点消息传递2.2 发布订阅消息传递3、Kafka简介3.1 设计目标3.2 Kafka的优点4、Kafka系统架构4.1 Broker4.2 Topic4.3 Partition4.4 Leader4.5 Follower4.6 replication…

ACL与NAT

ACL---访问控制列表&#xff0c;是一种策略控制工具 功能&#xff1a;1.定义感兴趣流量&#xff08;数据层面 &#xff09; 2.定义感兴趣路由&#xff08;控制层面&#xff09; ACL 条目表项组成&#xff1a; 编号规则&#xff1a;步数或者跳数默认值为5&#xff0c;…

Rancher 部署 MySQL

文章目录创建 pvc部署 MySQL前置条件&#xff1a;安装 rancher&#xff0c;可参考文章 docker 部署 rancher 创建 pvc MySQL 数据库是需要存储的&#xff0c;所以必须先准备 pvc 创建 pvc 自定义 pvc 名称选择已经新建好的 storageclass&#xff0c;storageclass 的创建可参考…

Mac os如何安装绿盾客户端

环境&#xff1a; Apple Mac mini 八核M1芯片 8G 256G Mac os 11.0 问题描述&#xff1a; Mac os如何安装绿盾客户端 解决方案&#xff1a; 一、关闭系统保护 1.关机电脑&#xff0c;按住“开机键”不放直到屏幕上出现“选项” 点击“继续”&#xff0c;等待进入恢复模…

github 使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录一、git与github二、出错的地方1.GitHub没有css样式2、git clone出现错误3、明明创建了responsibility 但git 不显示一、git与github 这个博客写的很好&#xff01;…

剔除绿化后的比较可靠的评价模型

sheet4权重实际评分&#xff08;越高越不好&#xff09;&#xff08;0-5分&#xff09;正向化&#xff08;5-X&#xff09;后分别与权重相乘得到该地的总分总分高&#xff0c;排名高为好&#xff0c;即污染小排序后

【Kubernetes】第三篇 - ci-server 构建节点 Docker、Jenkins 环境搭建

一&#xff0c;前言 上一篇&#xff0c;主要介绍了阿里云服务器的采购和简单配置&#xff1a; 三台服务器规划如下&#xff1a; 服务配置内网IP外网IP说明ci-server2c4g172.17.178.104182.92.4.158Jenkins Nexus Dockerk8s-master2c4g172.17.178.10547.93.9.45Kubernetes …

ARM uboot 源码分析5 -启动第二阶段

一、start_armboot 解析6 1、console_init_f (1) console_init_f 是 console&#xff08;控制台&#xff09;的第一阶段初始化。_f 表示是第一阶段初始化&#xff0c;_r 表示第二阶段初始化。有时候初始化函数不能一次一起完成&#xff0c;中间必须要夹杂一些代码&#xff0c;…

ccc-pytorch-回归问题(1)

文章目录1.简单回归实战&#xff1a;2.手写数据识别1.简单回归实战&#xff1a; 用 线性回归拟合二维平面中的100个点 公式&#xff1a;ywxbywxbywxb 损失函数&#xff1a;∑(yreally−y)2\sum(y_{really}-y)^2∑(yreally​−y)2 迭代方法&#xff1a;梯度下降法&#xff0c;…

【QA】[Vue/复选框全选] v-model绑定每一项的赋初值问题

发生场景&#xff1a;不只是复选框的状态改变&#xff0c;还有的功能要用到复选框的选中状态&#xff0c;比如&#xff1a;购物车计算总价&#xff0c;合计等等。 引入&#xff1a;复选框 checkbox 在使用时&#xff0c;需要用v-model绑定布尔值&#xff0c;来获取选中状态&…