您的位置:首页 > 其它

【leetcode】38. Count and Say

2016-06-26 11:12 399 查看
一、题目描述

The count-and-say sequence is the sequence of integers beginning as follows:

1, 11, 21, 1211, 111221, ...


1
is read off as
"one
1"
or
11
.

11
is read off as
"two
1s"
or
21
.

21
is read off as
"one
2
, then
one 1"
or
1211
.

Given an integer n, generate the nth sequence.

Note: The sequence of integers will be represented as a string.

题目解读:听读序列:1,11,21,1211,111221,....

第一个数字是1,1个1所以第二数字是11,2个1所以第三个数字是21,1个2和1个1所以第四个数字是1211.... 按这种规律类推

思路:从第三个开始,从1~n-1,对每个数字计数。每次都与前一个进行比较,相同就计数+1,否则就先把前一个数的个数+值存入结果字符串中。

c++代码(20ms,1.11%)

class Solution {
public:
string countAndSay(int n) {
string s="11";
if(n==1)
return "1";
if(n==2)
return "11";

for(int i=2;i<n;i++){
string str="";
for(int j=1;j<s.size();j++){
int count=1;
while(s[j] == s[j-1] && j<s.size()){
count++;
j++;
}
stringstream ss,cc;
ss<<count;
cc<<s[j-1];
str+=ss.str()+cc.str();
if(j==(s.size()-1) && s[j]!=s[j-1]){
int i=1;
stringstream mm,nn;
mm<<i;
nn<<s[j];
str+=mm.str()+nn.str();
}

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