LeetCode(38): 报数
Easy!
题目描述:
报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
1. 1 2. 11 3. 21 4. 1211 5. 111221
1
被读作 "one 1"
("一个一"
) , 即 11
。
11
被读作 "two 1s"
("两个一"
), 即 21
。
21
被读作 "one 2"
, "one 1"
("一个二"
, "一个一"
) , 即 1211
。
给定一个正整数 n ,输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串。
示例 1:
输入: 1 输出: "1"
示例 2:
输入: 4 输出: "1211"
解题思路:
题目描述的不是很清楚,其实就是第i+1个字符串是第i个字符串的读法,第一字符串为 “1”
比如第四个字符串是1211,它的读法是 1个1、1个2,2个1,因此第五个字符串是111221。
第五个字符串的读法是:3个1、2个2、1个1,因此第六个字符串是312211
......
简单的模拟就可以。
这道计数和读法问题还是第一次遇到,看似挺复杂,其实仔细一看,算法很简单,就是对于前一个数,找出相同元素的个数,把个数和该元素存到新的string里。
C++解法一:
1 class Solution { 2 public: 3 string countAndSay(int n) { 4 if (n <= 0) return ""; 5 string res = "1"; 6 while (--n) { 7 string cur = ""; 8 for (int i = 0; i < res.size(); ++i) { 9 int cnt = 1; 10 while (i + 1 < res.size() && res[i] == res[i + 1]) { 11 ++cnt; 12 ++i; 13 } 14 cur += to_string(cnt) + res[i]; 15 } 16 res = cur; 17 } 18 return res; 19 } 20 };
其实我们可以发现字符串中永远只会出现1,2,3这三个字符,假设第k个字符串中出现了4,那么第k-1个字符串必定有四个相同的字符连续出现,假设这个字符为1,则第k-1个字符串为x1111y。第k-1个字符串是第k-2个字符串的读法,即第k-2个字符串可以读为“x个1,1个1,1个y” 或者“*个x,1个1,1个1,y个*”,这两种读法分别可以合并成“x+1个1,1个y” 和 “*个x,2个1,y个*”,代表的字符串分别是“(x+1)11y” 和 "x21y",即k-1个字符串为“(x+1)11y” 或 "x21y",不可能为“x1111y”.
比如将前12个数字打印一下,发现一个很有意思的现象,不管打印到后面多少位,出现的数字只是由1,2和3组成,网上也有人发现了并分析了原因 (http://www.cnblogs.com/TenosDoIt/p/3776356.html),前12个数字如下:
1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 3 1 1 2 2 2 1 1 1 3 2 1 3 2 1 1 1 1 3 1 2 1 1 1 3 1 2 2 1 3 2 1 1 3 1 1 1 2 3 1 1 3 1 1 2 2 1 1 1 1 3 1 2 2 1 1 3 3 1 1 2 1 3 2 1 1 3 2 1 2 2 2 1 1 1 3 1 1 2 2 2 1 2 3 2 1 1 2 1 1 1 3 1 2 2 1 1 3 1 2 1 1 3 2 1 1
转载于:https://www.cnblogs.com/ariel-dreamland/p/9138400.html
LeetCode(38): 报数相关推荐
- LeetCode 38. 报数
1. 题目 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1 11 21 1211 111221 1 被读作 "one 1" ("一 ...
- leetcode @38报数-js
题目 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1 复制代码 11 复制代码 21 复制代码 1211 复制代码 111221 复制代码 1 被读作 &qu ...
- C#刷遍Leetcode面试题系列连载(2): No.38 - 报数
前言 前文传送门: 上篇文章中我们主要科普了刷 LeetCode 对大家的作用,今天咱们就正式进行 LeetCode 算法题分析.很多人都知道计算机中有种思想叫 递归,相应地也出现了很多算法.解决递归 ...
- LeetCode 38. Count and Say
问题链接 LeetCode 38. Count and Say 题目解析 找规律,每一个数字串是上一个数字串的"读法".比如:n=1时为"1",读作" ...
- 51 -leetcode 38 -字符串
// LeetCode 38 字符串 to_string int to string char 直接变为string //边界情况 for int i=0 i<.size() 比较的活 i+1 ...
- [勇者闯LeetCode] 38. Count and Say
[勇者闯LeetCode] 38. Count and Say Description The count-and-say sequence is the sequence of integers b ...
- LeetCode 38外观数列39组合总和
维护公众号:bigsai 回复bigsai分享一些学习资源! 本周上篇 LeetCode 36有效的数独&37解数独(八皇后问题) 外观数列 给定一个正整数 n(1 ≤ n ≤ 30),输出外 ...
- LeetCode之报数(简单 模拟 递归)
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 被读作 "one 1" ...
- 38.报数(C++实现)
题目 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1 11 21 1211 111221 1 被读作 "one 1" ("一个一& ...
- LeetCode: 38. Count and Say
0509第2题 题目 The count-and-say sequence is the sequence of integers with the first five terms as follo ...
最新文章
- 一道有意思的数据库题
- boost使用Proto转换来实现的例子
- Win32ASM-进程学习【1】
- 怎么添加一个程序集_门店小程序,微信小程序怎么添加店铺
- cJSON解析和打包
- Servlet期末复习笔记3
- DEFCON China倒计时 没想到炸屏“玩坏”百度
- Maven学习笔记1
- python网络爬虫从入门到精通吕云翔_python爬虫
- jsplumb入门教程及视频教程链接
- Java枚举(enum)
- 数据分析A/BTest之APP页面
- 用Python做的小游戏合集来咯~自行开发一个星际争霸小游戏~
- 白天 996, 我还能晚上669!
- JDG人脸识别课堂管理系统全栈开发流程报告-软件工程实践报告
- MySQL面试题学习笔记
- xp系统电脑蓝屏怎么解决,解决xp电脑屏幕蓝屏
- 5G NR CSI-RS介绍(1)-- 物理时频资源映射
- 自己实现strcat函数
- 传奇创世孙大宁:2016年H5将井喷,新传播途径是突破口