标签:
这个题是个数字规律题,题目的意思是,给定一个值 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; } };结果如下:
标签:
原文地址:http://blog.csdn.net/zr1076311296/article/details/51365820