前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >LeetCode题目38:外观数列

LeetCode题目38:外观数列

作者头像
二环宇少
发布于 2020-08-25 02:52:10
发布于 2020-08-25 02:52:10
31700
代码可运行
举报
运行总次数:0
代码可运行

原题描述

+

给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。

注意:整数序列中的每一项将表示为一个字符串。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入: 1
输出: "1"
解释:这是一个基本样例。

示例 2

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入: 4
输出: "1211"
解释:当 n = 3 时,序列是 "21",其中我们有 "2""1" 两组,
"2" 可以读作 "12",也就是出现频次 = 1 而值 = 2;
类似 "1" 可以读作 "11"。
所以答案是 "12""11" 组合在一起,也就是 "1211"

原题链接:https://leetcode-cn.com/problems/count-and-say

思路解析

+

从题目描述就知道这是一个基于前次结果迭代的过程。

做统计时要注意,连续出现的数字要一次性统计完再生成结果。关于如何统计连续出现的数字,只需要两个首尾指针begin和end,并且不断后移end并统计次数即可。

我做这道题的时候竟然卡在了怎么把数字转字符串这件事上,想想真是太无聊了。

像这种简单的题目大概率不会出现在面试题中,就当做一个消遣吧~

C++参考代码

+

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    string countAndSay(int n) {
        string res = "1";
        for (int i = 1; i < n; ++i) {
            string next_res = "";
            int begin = 0, end = 0;
            while (end < res.size()) {
                int count = 0;
                while(res[end] == res[begin] && end < res.size()) {
                    ++count;
                    ++end;
                }

                int val = res[begin];

                if (end < res.size()) begin = end;
                
                next_res += count + '0';
                next_res += val;
            }
            res = next_res;
        }
        return res;
    }
};

讲技术,也谈风月,更关注程序员的生活状况,欢迎联系二少投稿你感兴趣的话题。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 互联网西门二少 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode - #38 外观数列
我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。微博:@故胤道长[1])的 Swift 算法题题解整理为文字版以方便大家学习与阅读。
Swift社区
2022/05/19
2290
LeetCode - #38 外观数列
38 外观数列
你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = "1" countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。
木瓜煲鸡脚
2021/01/18
6220
38 外观数列
leetcode-38外观数列
countAndSay(1) = “1” countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。 前五项如下:
全栈程序员站长
2022/09/22
1680
​LeetCode刷题实战38: 外观数列
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/17
3240
​LeetCode刷题实战38: 外观数列
LeetCode 图解 | 38. 外观数列
题目来源于 LeetCode 上第 38 号问题:外观数列。题目难度为 Easy。
五分钟学算法
2020/05/19
5490
LeetCode 图解 | 38.  外观数列
☆打卡算法☆LeetCode 38、外观数列 算法解析
链接:38. 外观数列 - 力扣(LeetCode) (leetcode-cn.com)
恬静的小魔龙
2022/08/07
2130
☆打卡算法☆LeetCode 38、外观数列  算法解析
LeetCode 38. 外观数列
https://leetcode-cn.com/problems/count-and-say/
freesan44
2021/10/15
4190
LeetCode 38. 外观数列
​LeetCode刷题实战38: 外观数列
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
2600
​LeetCode刷题实战38: 外观数列
外观数列
要 描述 一个数字字符串,首先要将字符串分割为 最小 数量的组,每个组都由连续的最多 相同字符 组成。然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组。要将描述转换为数字字符串,先将每组中的字符数量用数字替换,再将所有描述组连接起来。
用户4456933
2021/06/01
5450
外观数列
Leetcode No.38 外观数列
countAndSay(1) = "1" countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。 前五项如下:
week
2022/01/07
2990
Leetcode No.38 外观数列
【刷穿 LeetCode】38. 外观数列(简单)
要 描述 一个数字字符串,首先要将字符串分割为 最小 数量的组,每个组都由连续的最多 相同字符 组成。然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组。要将描述转换为数字字符串,先将每组中的字符数量用数字替换,再将所有描述组连接起来。
宫水三叶的刷题日记
2021/02/20
3460
C#刷遍Leetcode面试题系列连载(2): No.38 - 报数
上篇文章中我们主要科普了刷 LeetCode 对大家的作用,今天咱们就正式进行 LeetCode 算法题分析。很多人都知道计算机中有种思想叫 递归,相应地也出现了很多算法。解决递归问题的要点有如下几个:
Enjoy233
2021/12/23
2740
C#刷遍Leetcode面试题系列连载(2): No.38 - 报数
外观数组(leetcode38)
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"
Vincent-yuan
2021/04/15
2860
【 关关的刷题日记47】Leetcode 38. Count and Say
关关的刷题日记47 – Leetcode 38. Count and Say 题目 The count-and-say sequence is the sequence of integers with the first five terms as following: 1 11 21 1211 111221 1 is read off as "one 1" or 11. 11 is read off as "two 1s" or 21. 21 is read off as "one 2, then on
WZEARW
2018/04/11
6230
大家好,我是练习时长两年半的LeetCode爱好者,喜欢唱跳rap
题目来源于 LeetCode 上第 38 号问题:报数。题目难度为 Easy,目前通过率为 50.7% 。
五分钟学算法
2019/07/15
5800
算法刷题:LC初级算法(三)
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。
看、未来
2021/09/18
3010
Q38 Count and Say
The count-and-say sequence is the sequence of integers with the first five terms as following: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 is read off as "one 1" or 11. 11 is read off as "two 1s" or 21. 21 is read off as "one 2, then one 1" or 1211. Giv
echobingo
2018/04/25
5210
[LeetCode]38.报数——题解(执行用时击败91% ,内存消耗击败 97%)
首先可以看到每一个报数的整数序列(字符串)是在“Count and Say”上一个报数的整数序列,即记数上一个报数结果中每个数字出现的次数。比如n=3时,整数序列是21,是由“1个2和1个1”组成,因此当下一个报数时(n=4),报数的整数序列位1211.
用户6557940
2022/07/24
3600
[LeetCode]38.报数——题解(执行用时击败91% ,内存消耗击败 97%)
leetcode: 38. Count and Say
Problem # The count-and-say sequence is the sequence of integers # with the first five terms as following: # # 1. 1 # 2. 11 # 3. 21 # 4. 1211 # 5. 111221 # # 1 is read off as "one 1" or 11. # 11 is read off as "two 1s" or 21. # 21
JNingWei
2018/09/27
3600
LeetCode 38. 报数
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
Michael阿明
2020/07/13
5330
相关推荐
LeetCode - #38 外观数列
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文