大家好,我是练习时长两年半的LeetCode爱好者,喜欢唱跳rap
点击蓝色“五分钟学算法”关注我哟
加个“星标”,一起学算法
今天分享一道很 rap 的算法题目。
题目来源于 LeetCode 上第 38 号问题:报数。题目难度为 Easy,目前通过率为 50.7% 。
题目描述
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
1. 12. 113. 214. 12115. 1112212. 113. 214. 12115. 111221
1
被读作 "one 1"
("一个一"
) , 即 11
。11
被读作 "two 1s"
("两个一"
), 即 21
。21
被读作 "one 2"
, "one 1"
("一个二"
, "一个一"
) ,即 1211
。
给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串。
示例 1:
输入: 1输出: "1"输出: "1"
示例 2:
输入: 4输出: "1211"输出: "1211"
题目解析
这道题目的难点在于题目的理解。
我看了一下 LeetCode 的评论区,绝大部分人都是在吐槽没看懂题目。题目的确比较绕,读了几篇才看明白。
题目讲的是后续的相应的 输出数字 依据的是它之前的 输出数字:
看懂了 题意,借助 递归 的概念,这道题的基本上就很好求解了。
动画描述
以报数字 6 为例。
代码实现
// c++class Solution {public: string countAndSay(int n) { //递归终止的条件 if(n == 1) return "1"; string prevResult = countAndSay(n-1); int count = 1;//计数 string nowResult;//存放结果 for(int i = 0 ; i < prevResult.length();i++){ //统计有多少个相同数字 if(prevResult[i] == prevResult[i+1]){ count++; continue; }else{ if( prevResult[i] != prevResult[i + 1]) { nowResult += to_string(count) + prevResult[i]; //重置开始统计其他的数字 count = 1; } } } return nowResult; }};class Solution {public: string countAndSay(int n) { //递归终止的条件 if(n == 1) return "1"; string prevResult = countAndSay(n-1); int count = 1;//计数 string nowResult;//存放结果 for(int i = 0 ; i < prevResult.length();i++){ //统计有多少个相同数字 if(prevResult[i] == prevResult[i+1]){ count++; continue; }else{ if( prevResult[i] != prevResult[i + 1]) { nowResult += to_string(count) + prevResult[i]; //重置开始统计其他的数字 count = 1; } } } return nowResult; }};
END
原 创 热 文 推 荐
☞毕业十年后,我忍不住出了一份程序员的高考试卷
☞一道腾讯面试题:厉害了我的杯
☞十大经典排序算法动画与解析,看我就够了
☞这或许是东半球分析十大排序算法最好的一篇文章
☞面试官,我会写二分查找法!对,没有 bug 的那种!
大家好,我是练习时长两年半的LeetCode爱好者,喜欢唱跳rap相关推荐
- 大家好!我是练习时长两天半的像素画练习生,喜欢唱,跳,rap...
此风水宝地是本0美术基础钢铁程序员的像素画练习之处,如非练就火眼金睛者速速alt+f4. 当然,若有专业美术人士愿意指正,请疯狂批评! 1.男教师. 后期点评:图1没画阴影,特别是脖子没阴影和脸连起来 ...
- 时长两年半,WPS打开文档的速度慢竟被我成功解决了
你有没有经常因为WPS打开文档的速度慢,并且卡,有时让你卡到怀疑人生,其实,有一招,可以快速解决文档打开速度的慢. 网上搜了很多种办法,但都无法解决,但是有一天,我突然有个大胆的想法,进过了历时两年半 ...
- 【spring】集成Web、druid、jdbcTemple实现免登录时长两天半
CSDN话题挑战赛第2期 参赛话题:学习笔记 *学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程.这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路.学习之乐,独乐乐,不如众 ...
- 练习时长两年半,二本学历,没背景,会唱跳篮球,美团四面成功拿下offer
个人背景 又逢"金九银十",年轻的毕业生们满怀希望与忐忑,去寻找.竞争一个工作机会.已经在职的开发同学,也想通过社会招聘或者内推的时机争取到更好的待遇.更大的平台. 然而,面试人群 ...
- 时长一年半的前端练习生2022年终总结
2022感觉过得真快,还有一周就结束了,趁着周末有时间来总结一下2022做了什么.最近小
- python提取时长2s以内的单词音频的韵母基频,以及单词词长信息
python提取时长2s以内的单词音频的韵母基频,以及单词词长信息 提取信息自动存入当前工作空间中的excel文件,包括文件名.前字时长.后字时长.两字总时长.前字韵母基频.后字韵母基频.(10个点, ...
- 活动时长计算尝试用Lambada 实现责任链的代码优化
文章目录 活动时长计算尝试用Lambada 实现责任链的代码优化 原流程 原代码 主控流程 计算标准费率时长子过程 电访和面访活动计算标准费率时长 路演活动计算标准费率时长 问卷活动计算标准费率时长 ...
- 计算两个时间之间的工作时长
计算两个时间之间的工作时长(小时)排除周末 package com.test;import org.apache.commons.lang3.time.DateUtils;import java.ma ...
- 捕获用户在该页面停留的时长,我是这样做的(前端监测)
前言 为什么要做这个监测用户停留的呢?原因很简单,如果我们要分析这个页面对我们的产品有没有价格,那么用户浏览的时长是一个很关键的点,如果每个用户平均每天在这个页面停留两个小时以上,那么我们会觉得这个页 ...
- Java多线程模拟驾校学车——假设共有30个学员,其中20个普通学员,10个VIP学员,两类学员并行叫号练车 ,叫号要求:vip学员被叫号的概率要高,vip学习时长是普通学员的3倍数···
假设共有30个学员,其中20个普通学员,10个VIP学员,两类学员并行叫号练车 叫号要求:vip学员被叫号的概率要高,vip学习时长是普通学员的3倍数,vip学员要在普通学员之前结束练车 packag ...
最新文章
- Python中如何使用构造方法定义类
- spring security自定义指南
- ActiveMQ入门教程(三) - ActiveMQ P2P版的HelloWorld
- mysql binlog过期策略_对存在过期 binlog 的 MySQL5.7 添加从服务器
- 第三次scrum冲刺
- C# winform使用InstallShield2019打包
- 2022-07-08 Unity Json2——LitJson
- 摩西十诫 摩西简介 世界宗教图谱
- STM32F103C8T6+LD3320语音识别模块智能灯控
- oracle nested loops outer,11g对Nested Loops的改进
- android定时开关机源码,定时关机程序及源码(易语言)-带设置自动启动功能
- 内存溢出(Memory Overflow)和内存泄露(Memory Leak)的区别
- 计算机故障维修四种思路,维修“望闻问切” 电脑故障的排除方法
- 什么是预测区间和置信区间
- 19年的桌面KDE的风雨和陪伴,没有什么能够割舍
- web服务器端预约系统,Web场馆预约管理系统
- python字典函数大全_python字典介绍
- 诺禾- tcp 网络效劳框架
- java/php/net/python宅急送管理系统设计
- 100集华为HCIE安全培训视频教材整理 | IPSec VdPdN高可靠性案例及配置(三)