【刷题记录】 38. 外观数列

简介: 【刷题记录】 38. 外观数列


theme: fancy


一、题目描述


来源:力扣(LeetCode)


给定一个正整数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


二丶思路分析


模拟法
从起始条件k = 1时,ans = "1" 开始,一直推导到k = n的情况。每一项都是对前一项的连续段,求「连续段」长度,可以使用双指针实现。


三、代码实现

public class Solution {
    public String countAndSay(int n) {
        String ans ="1";
for (int i =2; i <= n; i++) {
            String cur ="";
            int length = ans.length();
for (int j =0; j < length; ) {
                int k = j +1;
while (k < length && ans.charAt(j) == ans.charAt(k)) k++;
                int cnt = k - j;
                cur += cnt +""+ ans.charAt(j);
                j = k;
            }
            ans = cur;
        }
        return ans;
    }
}


复杂度分析


  • 时间复杂度:
    网络异常,图片无法展示
    |
  • 空间复杂度:
    网络异常,图片无法展示
    |


运行结果


网络异常,图片无法展示
|


总结


这道题的规律是很明显和显而易见的,最简单的做法就是直接按照规律进行模拟即可。

目录
相关文章
|
域名解析 网络协议 网络架构
XBox提升下载速度的方法
XBox提升下载速度的方法
1629 1
|
JavaScript 前端开发 数据处理
JavaScript 游戏规则:setTimeout和setInterval的对决
JavaScript 游戏规则:setTimeout和setInterval的对决
214 1
|
3天前
|
云安全 人工智能 算法
以“AI对抗AI”,阿里云验证码进入2.0时代
三层立体防护,用大模型打赢人机攻防战
1304 3
|
3天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
620 3
|
4天前
|
人工智能 Rust 运维
这个神器让你白嫖ClaudeOpus 4.5,Gemini 3!还能接Claude Code等任意平台
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费
|
10天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
735 5