笔试题51. LeetCode OJ (38)
2016-05-10 19:29
218 查看
这个题是个数字规律题,题目的意思是,给定一个值 n,按照规律列出第 n 个数字,规律如上图中所示,大概的意思是,表示左边的数字的下一个数字,例如:
1. “1”,它由 1 个 1 表示,则变成“11”
2. “11”,它由2个1组成,则变成“21”
3. "21",它由1个2和1个1组成,则变成"1211"
规律就是上面这样了,还是比较容易理解。代码如下:
class Solution { public: string countAndSay(int n) { //这个题是个数字游戏吧 string ret=""; if(n == 0) { return ret; } //n == 1 string tmp = "1"; if(1 == n) { return tmp; } // n > 1 for(int i = 1; i < n; ++i) { ret.clear(); size_t j = 0; while(j < tmp.size()) { char ch = tmp[j]; //计算重复数字的个数,比如‘11’-》‘21’ int num = 1; while(j+num < tmp.size() && tmp[j + num] == tmp[j]) { ++num; } if(1 == num) {//说明没有重复数字,因为num从1开始,则说明该tmp[j]是单独的 ret.push_back('1'); } else {// 否则说明出现了重复的数字,num 记为重复的个数 ret.push_back(num + '0'); } ret.push_back(tmp[j]); j += num; } tmp = ret; } return ret; } };结果如下:
相关文章推荐
- C++实验5—求和
- shell浅谈之二运算符和IF条件判断
- POJ 3087 Shuffle'm Up
- [Python] RiceRocks游戏 Mini-project #8
- Spark SQL和DataFrame的学习总结
- [读书笔记]Clean Code (8-完结)
- Java--类的继承--回合制对战游戏
- java中如何自定义线程
- java中static{}语句块详解
- RabbitMq、ActiveMq、ZeroMq、kafka之间的比较,资料汇总
- Android 内功心法(1.4)——android常用设计模式之代理模式
- Table of Contents - Spring
- Log4J日志组件
- 第11周阅读程序(5-1)
- webshell智能查杀
- androidView树的绘图流程
- hadoop关不掉namenode的解决办法
- 序列化和反序列化的简单理解
- Python 生成器 generator
- 小米5月10日发布会--miui8