您的位置:首页 > 其它

笔试题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;
}
};
结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: