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++解法一:

 class Solution {
public:
string countAndSay(int n) {
if (n <= ) return "";
string res = "";
while (--n) {
string cur = "";
for (int i = ; i < res.size(); ++i) {
int cnt = ;
while (i + < res.size() && res[i] == res[i + ]) {
++cnt;
++i;
}
cur += to_string(cnt) + res[i];
}
res = cur;
}
return res;
}
}; 

其实我们可以发现字符串中永远只会出现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. 上中下三个DIV,高度自适应(上高度固定,下固定,中间自适应)(代码来自X人)
  2. 讲解JS的promise,这篇是专业认真的!
  3. 开放产品开发(OPD):开篇
  4. Python: PDB命令
  5. struts2.3.24 + spring4.1.6 + hibernate4.3.11+ mysql5.5.25开发环境搭建及相关说明
  6. 【全国互虐】Fibonacci矩阵
  7. 2014年12月20日00:33:14-遮罩+进度条-extjs form.isvalid
  8. (DP)Best Time to Buy and Sell Stock
  9. 进程间通信系列 之 socket套接字实例
  10. hdu 5340 (manacher)
  11. Xcode Organizational Identifiers
  12. LINQ之路15:LINQ Operators之元素运算符、集合方法、量词方法
  13. 目前php连接mysql的主要方式
  14. laravel 使用构造器进行增删改查
  15. Jenkins持续集成构建自动化测试项目
  16. 配置开发环境2——eclipse配置
  17. HDU 4859 海岸线(最小割+最大独立点权变形)
  18. MFC笔记(DN)
  19. Codeforces Round #355 (Div. 2) D. Vanya and Treasure
  20. springboot整合spring @Cache和Redis

热门文章

  1. Shell变量的取用、删除、取代与替换
  2. JS,JQ及时监听input值的变化,MUI的input搜索框里的清除按钮的点击监听事件
  3. java中equals和compareTo的区别---解惑
  4. ruby where用法
  5. 破解excel密码保护【转】
  6. .Net进阶系列(11)-异步多线程(委托BeginInvoke)(被替换)
  7. 在O(N)时间内求解 正数数组中 两个数相加的 最大值
  8. js 报delete object in strict mode
  9. KVM 部署 日常操作
  10. kan